使用Parallel.ForEach时如何发送进度

时间:2011-02-01 22:44:23

标签: c# c#-4.0 parallel-processing task-parallel-library parallel-extensions

我打算在DataTable上使用Parallel.ForEach,以便可以将每条记录写入文件。

我们如何通知用户处理的记录的百分比/数量。

通常,当我们使用Background worker时,我们会有一个ProgressChanged事件,用户会收到完成工作百分比的通知。我们如何使用Parallel.ForEach或Multiple tasks来实现这一目标?

谢谢,兔子

2 个答案:

答案 0 :(得分:2)

我遇到过类似的问题。我们要解决的问题是对所有线程和UI都可见的数字使用Interlocked.Increment,并根据该数字显示进度条。

编辑: 请注意,如果您的计数器是long,则需要使用Interlocked.Read进行阅读。如果您使用的是int,则该进程已经是原子的。

答案 1 :(得分:2)

您将需要一个(共享)计数器,该计数器从0开始,并且您在每个部分的 end 处递增(使用Interlocked)。

然后你需要

  1. 触发事件,事件必须使用Invoke(或Dispatch)
  2. 或让计时器定期对计数器进行采样
  3. 当迭代次数很多时,

    选项2)更容易,效率更高。