首页 > 解决方案 > WPF 后台工作人员更新 UI 和获取数据

问题描述

我有从服务器检索数据并构建 XAML 的代码(方法/函数)。代码经过一个循环,因此数据的获取与创建 UI 元素的代码混合在一起。

我希望主线程保持响应。我知道不使用 Dispatcher 就无法更新“DoWork”中的 UI,但是有很多 XAML 代码。我可以使用 Dispatacher 和 Delegate 以某种方式包装整个方法吗?实现这一目标的最佳方法是什么?

编辑/更新 我最终设法将数据的获取与 XAML 代码分开。我只需要创建更多的类来临时保存数据。感谢大家的意见和建议。

标签: wpfmultithreadingxamlbackgroundworker

解决方案


将您的代码转换为使用 MVVM 并按照建议绑定到属性和命令将是最终的最佳解决方案。

同时,您可以将处理部分分解成块并在其间更新 UI。

对于 I/O 操作,检索它们的函数可能已经是异步的,因此您可以等待它们。对于 CPU 操作,您可以包装在 Task.Run()

例如

public async Task ProcessData(...) {        
    for (DataSource source in DataSourceURIs) {
        Data data = await FetchDataAsync(source);
        //Update UI here
        ProcessedData processedData = await Task.Run(() => SomeCPUOperation(data));
        //Update UI herea
     }
}

https://www.pluralsight.com/guides/using-task-run-async-await


推荐阅读