所以我使用循环创建多个BackgroundWorkers:
foreach (var item in list)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync(item);
}
现在我只是不知道如何检查所有这些 worker 是否完成了工作?
谢谢。
最佳答案
您可以保留一个活跃工作人员列表,并让每个工作人员在完成后自行删除:
List<BackgroundWorker> workers = new List<BackgroundWorker>();
...
foreach (var item in list)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
workers.Add(worker);
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
BackgroundWorker worker = (BackgroundWorker)s;
workers.Remove(worker);
}
worker.RunWorkerAsync(item);
}
...
public bool IsWorkDone
{
get { return workers.Count == 0; }
}
如果您不想池化 IsWorkDone,则可以在 workers.Remove(worker)
后(如果列表为空)引发一个事件...
关于wpf - 检查多个BackgroundWorker的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10947384/