0

我是 C# 线程的新手。我试图弄清楚如何以某种程度的并行性发出 100K 网络请求,并向 GUI 实时报告进度:

urls processed so far: ######
total moved so far:    ######
timed out so far:      ####3

我正在阅读 Albahari 兄弟的C# 5.0 in a Nutshell中的第 596 页,关于进度报告的部分。在这一点上,我看不到在 Progress 实例中这些计数器将如何以线程安全的方式递增,以及 UI 更新的确切方式/位置。即使在示例中专门讨论了写入控制台和写入 GUI 之间的区别,本书也使用Console.WriteLine. 如果有一个示例准确显示 Progress 实例中发生的情况,我将不胜感激——例如,增加一些 int 变量并写入文本框。

4

1 回答 1

2

我在我的博客上有一个演练,特别指出了一些注意事项:

  • IProgress<T>.Report是异步的,因此如果您发送的对象是不可变的,则效果最好。
  • 按照惯例,IProgress<T> progress传入你的 TAP 方法的参数可能是null,所以在报告进度之前检查一下。
  • Progress<T>与 UI 或其他单线程SynchronizationContext.
  • 从 的处理程序引发的异常Progress<T>直接转到SynchronizationContext,因此请避免从进度报告处理程序抛出异常。

这里还有一篇博客文章MSDN 文档非常好。

于 2013-08-05T20:34:26.990 回答