C#Backgroundworker race - 任何替代方案?

时间:2011-08-17 12:16:40

标签: c# backgroundworker

我对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,我的视图生成方式不正确

1 个答案:

答案 0 :(得分:2)

您可以使用CancelAsync()并将WorkerSupportsCancellation设置为true并实现循环以获取CancellationPending

while(x.CancellationPending) { /*TODO*/ }