进行<T>缓冲WPF更新

Ale*_*yte 3 c# wpf buffering system.reactive tpl-dataflow

我有一个方法,它Progress<T>作为参数,并在内部报告进展.

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

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

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

如果有人有例子,请发布.非常感谢.

Ron*_*dau 5

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

Subject<T> 在MSDN上

但是如果你觉得用你喜欢的方式做事情会更好,我根本就没有看到任何过度杀戮.