我想知道使用 EventHandler<T>
之间的区别和Progress<T>
。在某些情况下,哪种选择是更好的选择?
处理async Tasks
时我经常看到一个EventHandler<T> progressChangedCallback
人们用来订阅 ProgressChanged
对象的事件并报告进度变化,例如UI 上的进度条。我还看到有人经过IProgress<T>
实例到Tasks
作为参数。不同之处在于它们不调用事件,而是调用 IProgress<T>.Report()
方法代替。
最佳答案
它们是不同的机制。事件是在类上定义的,并且 IProgress<T>
传递给异步操作本身。当一次仅发生 1 个异步操作时,事件可能更有意义,并且每个此类操作的进度都需要以相同的方式显示,因为 UI 需要订阅单个事件一次,并且所有进度都会更新以同样的方式处理。安IProgress<T>
当您可以同时进行多个异步操作时可能更有意义,因为它可以让您了解哪个操作正在报告哪个进度。
请注意 Progress<T>
可以将进度更新分派(dispatch)回 UI 线程(如果使用正确),但事件不会这样做。
关于c# - EventHandler<T> 和 Progress<T> 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71063223/