2013-08-03 13 views
0

我是C#線程的新手。我試圖讓我圍繞着如何使100K Web請求,有一定程度的並行的頭,並報告進度實時的GUI:使用Albahari描述的IProgress接口需要的具體工作示例

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

我讀頁596ff C#5.0中由Albahari兄弟撰寫的關於進度報告的小節。此時,我看不到Progress實例中的這些計數器是如何以線程安全的方式遞增的,以及UI如何/在哪裏更新。在這個例子中,特別討論了寫入控制檯和寫入GUI之間的區別,本書使用Console.WriteLine。例如,我會很感激一個示例,顯示Progress實例中發生的具體內容 - 遞增一些int變量並寫入文本框。

+0

你的GUI有一個'SynchronizationContext',你可以發佈你的UI更新。你能發佈你已有的代碼嗎? –

回答

0

我有一個walkthrough on my blog,特別指出的告誡:

  • IProgress<T>.Report是異步的,所以效果最好,如果對象發送它是不可改變的。
  • 按照慣例,傳遞到您的TAP方法IProgress<T> progress可能null,所以報告進度之前檢查這一點。
  • Progress<T>與UI或其他效果最好單線程SynchronizationContext。從Progress<T>的處理程序提出
  • 例外直接去SynchronizationContext,所以避免了進展報告的處理程序拋出異常。

還有一個blog post hereMSDN docs都相當不錯。