Specific working example needed using IProgress interface described by Albahari

早过忘川 提交于 2019-12-12 00:45:01

问题


I am a neophyte at C# threading. I am trying to get my head around how to make 100K web requests, with some degree of parallelism, and report progress real-time to the GUI:

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

I am reading pages 596ff in C# 5.0 in a Nutshell by the Albahari brothers, the section on Progress Reporting. At this point, I don't see how in the Progress instance these counters would be incremented in a thread-safe manner, and exactly how/where the UI gets updated. EVen in the example specifically discussing the differences between writing to the console and writing to the GUI, the book uses Console.WriteLine. I'd be grateful for an example showing exactly what occurs in the Progress instance -- incrementing some int variables and writing to a textbox, for example.


回答1:


I have a walkthrough on my blog, in particular pointing out the caveats:

  • IProgress<T>.Report is asynchronous, so it works best if the object you send it is immutable.
  • By convention, the IProgress<T> progress passed into your TAP method may be null, so check for that before reporting progress.
  • Progress<T> works best with a UI or other single-threaded SynchronizationContext.
  • Exceptions raised from Progress<T>'s handler go directly to the SynchronizationContext, so avoid throwing exceptions from the progress report handler.

There's also a blog post here and the MSDN docs are quite good.



来源:https://stackoverflow.com/questions/18036912/specific-working-example-needed-using-iprogress-interface-described-by-albahari

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!