首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Parallel.ForEach时跟踪进度

在使用Parallel.ForEach时跟踪进度
EN

Stack Overflow用户
提问于 2010-10-06 09:24:32
回答 2查看 5.7K关注 0票数 11

我正在重构我的程序以使用Parallel.ForEach。以前,当我使用常规的for循环时,我使用Dispatcher更新WPF进度条,通过将当前数组索引除以数组大小来显示完成百分比。对于并行foreach循环,这不能正确显示,如预期的%跳转。

如何从并行for each循环更新WPF进度条,以便跟踪已完成迭代的数量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-06 09:44:26

正如SLaks建议的那样,您应该只增加进度条的值,而不是将它设置为从Parallel.For方法获得的当前索引。

但是,我会认真考虑使用比每次迭代都向UI线程发送消息更便宜的方式。如果您有大量的迭代,那么在每次迭代时发送一条消息可能是相当苛刻的。您可以声明一个局部变量count并使用Interlocked.Increment在并行化循环的主体中安全地递增该变量。

  • ,然后你可以使用像if (count % 10 == 0) // ...这样的东西在10次迭代后才能更新图形用户界面。(这并不完全正确,因为在您检查之前,其他线程可能会更新count,但如果它只是为了图形用户界面通知的目的,那么它应该无关紧要-您肯定不想在循环body).
  • Alternatively,中使用lock,您可以创建一个计时器,它将重复检查GUI线程中的count的值并更新进度条。这可能更简单,您可以保证进度条将更新得足够频繁,但不会更多。
票数 9
EN

Stack Overflow用户

发布于 2010-10-06 09:30:33

每次完成操作时,都应该向UI线程发送一条消息(通过调用将进度条递增1的Dispatcher.BeginInvoke

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3868920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档