我对backgroundWorker类有些问题。我希望我可以在一个函数中取消Backroundworker,然后从头开始启动Backgroundworker dowork。它导致种族,我不知道如何改变它。在.net 3.5
中是否有任何替代Backgroundworker的方法编辑:
My code:
BackgroundWorker worker = new BackgroundWorker();
public void Func()
{
if(worker.IsBusy)
{
worker.CancelAsync();
worker = new BackgroundWorker();
}
View.Clear();
worker.WorkerSupportsCancellation = true;
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
BackgroundWorker sender = s as BackgroundWorker;
if(sender.CancellationPending)
{
args.Cancel = true;
return;
}
View.Generate(Filter);
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
if(args.Error != null)
{
MessageBox.Show(args.Error.Message);
return;
}
BackgroundWorker sender = s as BackgroundWorker;
if(args.Cancelled )
{
View.Clear();
}
};
worker.RunWorkerAsync();
}
问题是:cancelAsync根本不关闭worker,我的视图生成方式不正确
答案 0 :(得分:2)
您可以使用CancelAsync()并将WorkerSupportsCancellation设置为true并实现循环以获取CancellationPending
while(x.CancellationPending) { /*TODO*/ }