Wpf 使用Albahari描述的IProgress接口所需的具体工作示例

Wpf 使用Albahari描述的IProgress接口所需的具体工作示例,wpf,parallel-processing,async-await,progress,c#-5.0,Wpf,Parallel Processing,Async Await,Progress,C# 5.0,我是C#threading的新手。我正试图了解如何以一定程度的并行性发出10万个web请求,并向GUI实时报告进度: urls processed so far: ###### total moved so far: ###### timed out so far: ####3 简而言之,我正在阅读Albahari兄弟的C#5.0版596ff页,这是关于进度报告的部分。在这一点上,我看不到在Progress实例中这些计数器是如何以线程安全的方式递增的,也看不到UI是如何更新的。

我是C#threading的新手。我正试图了解如何以一定程度的并行性发出10万个web请求,并向GUI实时报告进度:

urls processed so far: ######
total moved so far:    ######
timed out so far:      ####3
简而言之,我正在阅读Albahari兄弟的C#5.0版596ff页,这是关于进度报告的部分。在这一点上,我看不到在Progress实例中这些计数器是如何以线程安全的方式递增的,也看不到UI是如何更新的。即使在专门讨论写入控制台和写入GUI之间差异的示例中,本书也使用了
console.WriteLine
。如果有一个例子能够准确地显示Progress实例中发生的情况,我将不胜感激。例如,递增一些int变量并写入文本框。

我有一个例子,特别指出了注意事项:

  • IProgress.Report
    是异步的,因此如果发送给它的对象是不可变的,则效果最好
  • 按照惯例,传递到TAP方法中的
    IProgress progress
    可能是
    null
    ,因此请在报告进度之前检查该值
  • Progress
    与UI或其他单线程
    SynchronizationContext
    配合使用效果最佳
  • Progress
    的处理程序引发的异常直接转到
    SynchronizationContext
    ,因此避免从进度报告处理程序引发异常

还有一个和的都很好。

您的GUI有一个
SynchronizationContext
,您可以在这里发布UI更新。你能把你已有的代码贴在哪里吗?