我有一个将 Progress<T> 作为参数并在内部报告进度的方法。

因为进程可能在工作线程上快速发生(例如每秒数百次),所以我需要缓冲它,然后使用接收到的记录更新 View 模型,例如每半秒。

过去我使用过 Observable.FromEventPattern().Buffer(TimeSpan),所以我发现如果我将 Progress<T> 报告包装到一个事件中,则可以使用相同的 Rx 机制。然而,这似乎有点矫枉过正。有没有更优雅的解决方案?

我也看过 TPL Dataflow 的 BufferBlock 但我不确定它是否支持基于时间的缓冲,例如每半秒。

如果有人有例子,请张贴。将不胜感激。

最佳答案

RX 是这样做的明显选择,但是您根本不需要“使用”事件来使用 RX,在您的情况下,您可以简单地使用 Subject<Progress<T>> 并让您的方法(当前获取 Progress<T> 作为参数)推送数据进入主题。然后,您将对该主题进行 RX 查询,就像您之前对事件来源的 observable 所做的一样

Subject<T> on MSDN

但是,如果您对按照习惯的方式进行事件感觉更好,那么我认为这完全没有过分。

关于c# - WPF 更新的 Progress<T> 缓冲,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24352772/

10-14 16:38