我是C#线程的新手。我试图了解如何制作100K Web请求,具有一定程度的并行性,并实时向GUI报告进度:
urls processed so far: ######
total moved so far: ######
timed out so far: ####3
我正在阅读Albahari兄弟的 C#5.0 in a Nutshell 中的第596ff页,这是关于进展报告的部分。此时,我没有看到在Progress实例中这些计数器将如何以线程安全的方式递增,以及UI的更新方式。在示例中,专门讨论写入控制台和写入GUI之间的差异,本书使用Console.WriteLine
。我要感谢一个示例,它显示了Progress实例中发生了什么 - 例如,增加一些int变量并写入文本框。
答案 0 :(得分:0)
我有walkthrough on my blog,特别指出了警告:
IProgress<T>.Report
是异步的,因此如果您发送的对象是不可变的,它最有效。IProgress<T> progress
可能是null
,因此请在报告进度之前检查一下。Progress<T>
最适合使用UI或其他单线程SynchronizationContext
。Progress<T>
的处理程序引发的异常直接转到SynchronizationContext
,因此请避免从进度报告处理程序中抛出异常。还有一个blog post here,MSDN docs非常好。