在 WPF 中使用 ReactiveUI 从 long-运行 命令提供反馈的正确方法

Proper way to provide feedback from long-running command using ReactiveUI in WPF

我有一个 C#/WPF/.NET 4.5 应用程序,用户将使用它来打开某些文件。然后,该应用程序将进行大量操作 - 读取文件,将其传递给许多插件和解析器。这些文件可能相当大 (>100MB),因此这可能需要一段时间。我想让用户了解 UI 中发生的事情,所以在我的视图模型中我有一些用于显示当前状态和进度条的东西。

现在我想变得酷炫和现代,并使用 ReactiveUI 的异步命令支持来做到这一点,这对我来说是全新的。

对于load/parse进程的反馈信息,最好的处理方法是什么?状态消息和进度条 val/max 值需要在 UI 线程上设置,非常基本的东西。我应该将我的数据加载器实现为 IObservable,还是使用 MessageBus 组件等方式更好?

请记住,用户可能会同时将几个这样的大文件加载到应用程序中,我希望 UI 在加载过程中尽可能保持响应。

我们将不胜感激如何正确实施的示例!

我在其他地方和大师本人 (Paul C. Betts) 核实过这个问题,他告诉我处理这个问题的方法是让显示进度信息的应用程序创建一个 Subject 并传递它对于那些真正做事的人 loading/parsing。然后这些可以使用 .OnNext() 将新信息推送到主机。

这也有助于单元测试,其中可以只提供一个不会被订阅的虚拟 Subject