【发布时间】:2012-05-17 10:34:34
【问题描述】:
我有一个后台工作人员需要根据选中的复选框数量多次调用 - 我编写了这个来获取复选框值并将它们放入 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() 的后台工作人员有一个条件,但这(显然)只是跳过了剩余的迭代而没有执行。
【问题讨论】:
标签: c# .net multithreading asynchronous backgroundworker