wpf - 检查多个BackgroundWorker的进度

标签 wpf progress-bar backgroundworker

所以我使用循环创建多个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/

相关文章:

c# - 使用 C# 打印文件 Excel

c# - 如何在 WPF 应用程序启动期间显示等待光标?

c# - GlyphIndices 属性如何在 GlyphRun 对象中编码?

c# - 在没有数据绑定(bind)的情况下在 XAML 中应用值转换器

jquery - 动画进度条列表计数器只计算最后一个 aria-valuenow

c# - 后台工作人员中的暂停/恢复循环

c# - 将方法传递给 backgroundworker dowork

flutter - 如何在 flutter 中加载数据之前显示进度对话框?

Android SeekBar 自动更改大小并偏移 "thumb",因此没有任何内容正确排列

c++ - 关于windows窗体中多线程和后台工作线程的一些问题