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

时间:2015-10-07 08:28:20

标签: c# .net wpf reactiveui

我有一个C#/ WPF / .NET 4.5应用程序,用户将用它来打开某些文件。该应用程序将经历许多动作 - 读取文件,通过一些插件和解析器传递它。这些文件可能相当大(> 100MB),因此可能需要一段时间。我想让用户知道UI中发生了什么,所以在我的viewmodel中我有一些显示当前状态和进度条的东西。

现在我希望变得更酷,更现代,并使用ReactiveUIs Async命令支持,这对我来说是全新的。

对于来自加载/解析过程的反馈消息,最佳方法是什么?需要在UI线程上设置状态消息和进度条val / max值,这是非常基本的东西。我应该将我的数据加载器实现为IObservable,还是以某种方式更好地使用例如MessageBus组件?

请记住,用户可能会同时将多个巨大的文件加载到应用中,我希望在加载过程中尽可能保持用户界面的响应能力。

如何正确实施这一点的例子将非常受欢迎!

1 个答案:

答案 0 :(得分:3)

我在其他地方与The Master本人(Paul C. Betts)一起检查了这个,他告诉我处理这个的方法是显示进度信息的应用程序来创建一个主题< SomeProgressInfo>并将此传递给进行实际加载/解析的人。然后,这些可以使用.OnNext()将新信息推送到主机。

这也有助于单元测试,其中人们可以仅提供虚拟主题< T>。那将不会被订阅。