EventHandler<T> 和 Progress<T> 的区别?
Difference between EventHandler<T> and Progress<T>?
我想知道使用 EventHandler<T>
和 Progress<T>
之间的区别。有没有哪种情况是更好的选择?
在处理 async Tasks
时,我经常看到人们使用 EventHandler<T> progressChangedCallback
订阅对象的 ProgressChanged
事件并报告进度变化,例如UI 上的进度条。我还看到人们将 IProgress<T>
实例作为参数传递给 Tasks
。区别在于它们不调用事件,而是调用 IProgress<T>.Report()
方法。
它们是不同的机制。在 class 上定义了一个事件,并且 IProgress<T>
被传递给异步操作本身。当一次只发生 1 个异步操作时,事件可能更有意义,并且每个此类操作的进度都需要以相同的方式显示,因为 UI 需要订阅单个事件一次,并且它的所有进度更新都以相同的方式处理。当您可以同时进行多个异步操作时,IProgress<T>
可能更有意义,因为它可以让您了解哪个操作正在报告哪个进度。
请注意,Progress<T>
可以很好地将进度更新分派回 UI 线程(如果以正确的方式使用),但事件不会这样做。