所以我使用循环创建了多个 BackgroundWorker:
foreach (var item in list)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync(item);
}
现在我只是不知道如何检查所有这些工人是否完成了工作?
谢谢。
所以我使用循环创建了多个 BackgroundWorker:
foreach (var item in list)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync(item);
}
现在我只是不知道如何检查所有这些工人是否完成了工作?
谢谢。
您可以保留一个活跃工作人员列表,并让每个工作人员在完成后自行删除:
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)
列表为空之后引发事件...
假设workers
是代表工人列表的变量,_completedWorkersCount
是完成工作的工人的数量......
worker.RunWorkerCompleted +=
(o, e) =>
{
_completedWorkersCount = workers.Where(w => !w.IsBusy).Count();
};