WPF更新的Progress<T>缓冲

3

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

由于进展可能会很快(例如每秒数百次)在工作线程上发生,所以我需要缓冲它,然后每隔半秒更新视图模型。

过去我使用过 Observable.FromEventPattern().Buffer(TimeSpan),因此如果我将 Progress<T> 报告包装成事件,就可以利用相同的 Rx 机制。但是,那似乎过于复杂了。是否有更优雅的解决方案?

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

如果有任何示例,请发布它。非常感谢。


BufferBlock 没有任何支持。您可以使用 BatchBlock 并从计时器调用 TriggerBatch(),但我认为 Rx 在这里是更好的选择。 - svick
谢谢您的评论。我选择了Rx。 - Alec Bryte
1个回答

5
RX是做这件事情的明显选择,但您不需要使用事件来使用RX,在您的情况下,您可以简单地使用一个Subject<Progress<T>>,并让您的方法(当前将Progress<T>作为参数获取)将数据推送到该主题中。然后,您可以在该主题上进行RX查询,就像您之前对事件源可观察对象所做的操作一样。 MSDN上的Subject<T> 但是,如果您希望按照您习惯的方式使用事件,我认为这种方式没有任何过度设计的问题。

如果您发布您当前的实际代码,我很乐意将其作为样本进行重写,并将其添加到此帖子中。 - Ronan Thibaudau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接