当前位置:
首页 >
BackgroundWorker
发布时间:2024/4/17
41
豆豆
生活随笔
收集整理的这篇文章主要介绍了
BackgroundWorker
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Threading;namespace 异步编程
{class Program{static void Main(string[] args){MyDownloadString ds = new MyDownloadString();ds.DoRun();Console.ReadKey();}}class MyDownloadString{Stopwatch sw = new Stopwatch();public void DoRun(){const int LargeNumber = 6000000;sw.Start();Task<int> t1 = CountCharacterAsync(1, "http://www.microsoft.com");// t1.Wait(); 等待这个任务执行完成再去执行其他Task<int> t2 = CountCharacterAsync(2, "http://www.illustratedcsharp.com");//t2.Wait();// Console.WriteLine("3"+t2.Result);CountToAlargeNumber(1, LargeNumber);CountToAlargeNumber(2, LargeNumber);CountToAlargeNumber(3, LargeNumber);CountToAlargeNumber(4, LargeNumber);Console.WriteLine("4");Console.WriteLine("chars in www.microsoft.com : {0}", t1.Result);Console.WriteLine(" chars in www.illustatecsharp.com : {0}", t2.Result);Console.WriteLine("time in total : " + sw.Elapsed.TotalMilliseconds);}//async 相当于一个标志,标志这个是异步方法,await 指明需要异步执行的地方 ,一个//异步方法可以包含任意多个await表达式,如果一个不包括编译器会报警,//异步方法的三种返回类型//Task<T> ,方法返回值,使用Task.Result获得这个返回值//Task ,如果调用方法不需要从异步方法中返回某个值,但需要检查异步方法的状态,此时使用Task,这是即使异步方法return了某个值,此时也不会获取到//Void ,只是调用异步方法,没有任何交互// await 指定一个异步执行的任务(TASK),创建一个Task的最简单方法是 Task.run() ,它是在不同线程上运行方法//Task.Delay 不同于thread.sleep 不会阻塞线程,线程可以继续处理其他工作private async Task<int> CountCharacterAsync(int id ,string site){WebClient wc = new WebClient();Console.WriteLine("starting call {0} : {1} ms", id, sw.Elapsed.TotalMilliseconds);string result = await wc.DownloadStringTaskAsync(new Uri(site));Func<int, int> nf = new Func<int, int>(get10);await Task.Run(() => get10(2)); // 使用lambada表达式逃避task类型的约束Console.WriteLine(" Call {0} completed : {1} ms",id, sw.Elapsed.TotalMilliseconds);await Task.Delay(5000);return result.Length;}private void CountToAlargeNumber(int id ,int value){for (long i = 0; i < value; i++) ;Console.WriteLine(" End counting {0} : {1} ms ",id,sw.Elapsed.TotalMilliseconds );}private int get10(int x){return 10+x;}}
}
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace BackgroundWorker {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){if (!backgroundWorker1.IsBusy){backgroundWorker1.RunWorkerAsync();}}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){for (int i = 1; i < 11; i++){Thread.Sleep(2000);backgroundWorker1.ReportProgress(i * 10);}}private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e){progressBar1.Value = e.ProgressPercentage;}} }
转载于:https://www.cnblogs.com/Jeely/p/11001939.html
总结
以上是生活随笔为你收集整理的BackgroundWorker的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: aop-xml-环绕增强
- 下一篇: 在ArcGIS调坐标系引发的一系列问题