wpf - WPF 后台工作人员更新 UI 和获取数据
问题描述
我有从服务器检索数据并构建 XAML 的代码(方法/函数)。代码经过一个循环,因此数据的获取与创建 UI 元素的代码混合在一起。
我希望主线程保持响应。我知道不使用 Dispatcher 就无法更新“DoWork”中的 UI,但是有很多 XAML 代码。我可以使用 Dispatacher 和 Delegate 以某种方式包装整个方法吗?实现这一目标的最佳方法是什么?
编辑/更新 我最终设法将数据的获取与 XAML 代码分开。我只需要创建更多的类来临时保存数据。感谢大家的意见和建议。
解决方案
将您的代码转换为使用 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
推荐阅读
- python - Python请求[Errno 111]在服务器上运行时连接被拒绝,但在本地PC上没有
- android - 如何向 Room 支持的 pagedList 添加新项目?
- class - 为什么在 Es6 类构造函数中使用美元符号
- javascript - 有人可以解释一下这段代码背后的过程吗?查找arrayList中的最小数字
- pandas - 满足条件时删除所有组行?
- excel - 擦除不确定大小的行内的重复值
- android - 如何在 android 中使用 Azure 认知翻译服务?
- php - Laravel 集合在 foreach 循环中变为空
- sparql - 如何通过 SPARQL 查询从 Ontology 中的子类中获取值?
- php - 如何使用 mysqli group_concat 创建嵌套 JSON?