【发布时间】:2012-07-29 23:59:55
【问题描述】:
取消BackGroundWorker后,在DoWork中,CancellationPending为true,但当他来到RunWorkerCompleted时,CancellationPending为false。我不知道我做错了什么?
static BackgroundWorker b1;
static void Main(string[] args)
{
b1=new BackgroundWorker();
b1.DoWork += new DoWorkEventHandler(work1);
b1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(completed);
b1.WorkerSupportsCancellation = true;
b1.RunWorkerAsync("Hellow");
Console.ReadLine();
}
private static void completed(object sender, RunWorkerCompletedEventArgs e)
{
if (((BackgroundWorker)sender).CancellationPending)
Console.WriteLine("Canceled!");
else
Console.WriteLine("Result:" + e.Result);//it goes here every time
}
private static void work1(object sender, DoWorkEventArgs e)
{
((BackgroundWorker)sender).CancelAsync();
if (((BackgroundWorker)sender).CancellationPending)
{
e.Cancel = true;
}
}
顺便说一句,如何将 DoWork 中发生的错误添加到 RunWorkerCompletedEventArgs.Error 以将其告知用户?
【问题讨论】:
标签: c# backgroundworker