取消BackgroundWorker(无循环的单一方法)

时间:2014-05-21 03:46:38

标签: wpf c#-4.0 backgroundworker

如何取消以下工作?

workerLoad = new BackgroundWorker();
                    workerLoad.WorkerSupportsCancellation = true;


                    workerLoad.DoWork += (o, ea) =>
                    {
                        //Thread.Sleep(100);
                        Dispatcher.BeginInvoke((Action)(() => BindWorkarea(selectedFolder,false)));
                        //Dispatcher.Invoke((Action)(() => workareaListView.DataContext = pages));                       
                    };
                    workerLoad.RunWorkerCompleted += (o, ea) =>
                    {
                        Mouse.OverrideCursor = null;
                    };
                    workerLoad.RunWorkerAsync();

我没有循环运行来检查取消状态并设置cancelAsync

 if (workerLoad.CancellationPending)
    {
        e.Cancel = true;
        break;
    }

DoWork,只有一种循环文件并使用调度程序添加到屏幕的方法。

1 个答案:

答案 0 :(得分:0)

你正在一个功能中完成所有工作......

您需要将工作分解为循环并将循环置于BackgroundWorker内,然后在循环内部通过Dispather更新UI。这样你就有机会随意分解这个过程。