我正在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);
}
});
答案 0 :(得分:1)
(按照评论中的说明:)
当你返回上一个用户控件时,它不会重新运行构造函数 - 所以如果你需要在那时重新初始化BackgroundWorker
,你需要将初始化代码移动到一个可以运行的方法中在适当的时候。