如何在CancelAsync后启动BackgroundWorker
本文关键字:启动 BackgroundWorker CancelAsync | 更新日期: 2023-09-27 18:03:45
我在UserControls中使用backgroundworker,我通过单击按钮加载到面板中。我在一个UC中点击CancelAsync BW,然后我去另一个UC。当我想回到以前的UС(我已经取消了BW),我总是进入RunWorkerCompleted事件。
我已经尝试在UC构造函数中重新初始化BW:
bgrWorker = new BackgroundWorker
{
WorkerSupportsCancellation = true,
WorkerReportsProgress = true
};
bgrWorker.DoWork += DoWork;
bgrWorker.ProgressChanged += ProgressChanged;
bgrWorker.RunWorkerCompleted += RunWorkerCompleted;
btnStop.Click += StopWorker;
但是行不通。
DoWork事件代码:
System.Threading.Tasks.Parallel.For(0, _list.Count, num =>
{
if (bgrWorker.CancellationPending)
{
e.Cancel = true;
}
else
{
_splittedList.Add(FindMiddle.Find(_list[num], 20));
bgrWorker.ReportProgress(0);
}
});
(如注释所示)
当您返回到前一个用户控件时,这将不会重新运行构造函数—因此,如果您需要在此时重新初始化BackgroundWorker
,则需要将初始化代码移动到可以在适当时间运行的方法中。