我有一个后台工作人员,需要根据选中的复选框数量多次调用 - 我已经编写了这个来获取复选框值并将它们放入List
.
List repSelected = new List();
这被填充,然后像这样迭代:
foreach (string rep in repSelected)
{
backgroundWorker1.RunWorkerAsync(rep);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
}
异步的 DoWork 代码如下所示:
BackgroundWorker worker = sender as BackgroundWorker;
string rep = e.Argument.ToString();
if (worker.CancellationPending == true)
{
e.Cancel = true;
}
else
{
DirectoryExists(rep);
ProcessRunner(rep); //Rars some large files - expensive
}
然后该进程运行 WorkerComplete,问题是当该进程返回执行 Worker 的下一次迭代时,它会崩溃,说该 Worker 很忙——即使该 Worker 已返回其 WorkerCompleted 状态。
如何确保在循环的下一次迭代之前关闭线程?
注意:我对包含后台工作人员有一个条件,!backgroundWorker1.IsBusy()
但这(显然)只是跳过了剩余的迭代而没有执行。