BackgroundWorker作用基本就能用名字来表达了
具体工作内容函数
static void Worker_DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine("doworker thread pool thread id: {0}", Thread.CurrentThread.ManagedThreadId);
var bw = (BackgroundWorker)sender;
for(int i = 1; i <= 100; i ++)
{
if (bw.CancellationPending)
{
e.Cancel = true;
return;
}
if(0 == i %10)
{
bw.ReportProgress(i);
}
Thread.Sleep(TimeSpan.FromSeconds(0.1));
}
e.Result = 42;
}
进度处理函数
static void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine("{0}% completed. progress thread pool thread id: {1}",
e.ProgressPercentage,
Thread.CurrentThread.ManagedThreadId);
}
任务结束,用于断后的函数
static void Worker_Completed(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine("completed thread pool thread id: {0}",
Thread.CurrentThread.ManagedThreadId);
if(e.Error != null)
{
Console.WriteLine("exception {0} has occured.",
e.Error.Message);
}
else if(e.Cancelled)
{
Console.WriteLine("operation has been canceled.");
}
else
{
Console.WriteLine("the answer is {0}", e.Result);
}
}
调用函数
static void Main(string[] args)
{
var bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += Worker_DoWork;
bw.ProgressChanged += Worker_ProgressChanged;
bw.RunWorkerCompleted += Worker_Completed;
bw.RunWorkerAsync();
Console.WriteLine("Press c to cancel work");
do
{
if (Console.ReadKey(true).KeyChar == 'c')
{
bw.CancelAsync();
Console.WriteLine("work canceled");
}
}
while (bw.IsBusy);
Console.ReadKey();
}