【问题标题】:Progress<T> buffering for WPF updatesProgress<T> 缓冲 WPF 更新
【发布时间】:2014-06-22 15:30:09
【问题描述】:

我有一个将Progress&lt;T&gt; 作为参数并在内部报告进度的方法。

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

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

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

如果有人有示例,请发布。将不胜感激。

【问题讨论】:

  • BufferBlock 对此没有任何支持。您可以使用 BatchBlock 并从计时器调用 TriggerBatch(),但我认为 Rx 是一个更好的选择。
  • 感谢您的评论。和 Rx 一起去。

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


【解决方案1】:

RX 是执行此操作的明显选择,但是您根本不需要使用事件来使用 RX,在您的情况下,您可以简单地使用 Subject&lt;Progress&lt;T&gt;&gt; 并使用您的方法(当前获取 @987654323 @ 作为参数)将数据推送到主题中。然后你会像你之前对事件来源的 observable 所做的那样对该主题进行 RX 查询

Subject&lt;T&gt; on MSDN

但是,如果您觉得按照自己习惯的方式参加活动会更好,我认为这并没有什么矫枉过正的地方。

【讨论】:

  • 如果您发布您当前的实际代码,我很乐意编辑这篇文章,将其添加为用主题重写的示例
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
相关资源
最近更新 更多