进行<t>缓冲WPF更新</t>

时间:2014-06-22 15:30:10

标签: c# wpf system.reactive buffering tpl-dataflow

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

由于进度可能在工作线程上快速发生(例如每秒数百次),我需要对其进行缓冲,然后使用收到的记录更新视图模型,例如:每半秒钟一次。

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

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

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

1 个答案:

答案 0 :(得分:5)

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

Subject<T> on MSDN

然而,如果你对事件的处理方式比你习惯的方式更好,我根本就没有看到任何过度杀戮。