c# - EventHandler<T> 和 Progress<T> 之间的区别?

标签 c# asynchronous tap

我想知道使用 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/

相关文章:

linux - Tap接口(interface)和/dev/net/tun设备,使用ip tuntap命令

c# - 使用自定义 IXmlSerializer 反序列化注释

javascript - Node.js - 如何使用 MySQL 查询从 for 循环返回带数组的回调?

c# - 按钮的单个 onclick 事件如何执行 2 个操作

c++ - 函数内的异步定时器

android - 如何从主 UI 线程检测到 Parse 的 query.findInBackground 已完成并返回数据?

reactjs - ScrollView 内的 onPress 事件需要 React Native 两次点击

webpack - 如何使用 `tap` 编译并运行 `webpack` 测试?

c# - 在WCF服务的内存中缓存明文密码

c# - 保证变量的最新值始终对多处理器系统上的多个线程可见