Specific working example needed using IProgress in

2019-08-31 01:11发布

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条回答
小情绪 Triste *
2楼-- · 2019-08-31 01:53

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.

查看更多
登录 后发表回答