【问题标题】:Check progress of multiple BackgroundWorker检查多个BackgroundWorker的进度
【发布时间】:2012-06-08 10:45:29
【问题描述】:

所以我使用循环创建了多个 BackgroundWorker:

  foreach (var item in list)
  {
    worker = new BackgroundWorker();
    worker.DoWork += worker_DoWork;
    worker.RunWorkerAsync(item);
  }

现在我只是想不通如何检查所有这些工人是否完成了他们的工作?

谢谢。

【问题讨论】:

  • 查看BackgroundWorker.IsBusy ...
  • 谢谢,但不是只检查一个 BackgroundWorker 实例吗?我可以将 list.Count 与每个工人完成 jobFinished++ 后更新的一些变量进行比较;但可能有一些更优雅的方式;

标签: wpf progress-bar backgroundworker


【解决方案1】:

您可以保留一个活跃工作人员列表,并让每个工作人员在完成后自行移除:

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) 之后引发事件...

【讨论】:

    【解决方案2】:

    假设workers 是代表工人列表的变量,_completedWorkersCount 是完成工作的工人的数量......

        worker.RunWorkerCompleted +=
        (o, e) =>
         {
             _completedWorkersCount = workers.Where(w => !w.IsBusy).Count();
         };         
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多