WPF async异步处理中实现 UI thread 的绑定同步
来源:互联网 发布:linux安装vnc客户端 编辑:程序博客网 时间:2024/05/19 17:56
先来一个经典的抓取网页,然后Parse转换内容到数组并通过绑定更新到UI的方法:
private async void OnTaskBasedAsyncPattern(object sender, RoutedEventArgs e)
{
foreach (var req in GetSearchRequests())
{
var clientHandler = new HttpClientHandler { Credentials = req.Credentials };
var client = new HttpClient(clientHandler);
var response = await client.GetAsync(req.Url, cts.Token);
string resp = await response.Content.ReadAsStringAsync();
await Task.Run(() => {
IEnumerable images = req.Parse(resp);
foreach (var image in images)
{
_searchInfo.List.Add(image);
}
}
}
}
Task.Run 中我们做了两件事情,把抓取到的内容转换成一个枚举数组,然后遍历这个数组把它们都加到与 UI 绑定的 _searchInfo 数组中。
由于 Task.Run 是在后台运行的,直接对 UI 更新会有问题,我们就需要做一些变更:把_searchInfo 的更新放到 UI thread 中。
WPF 中提供了一个简单的方法:
private object _lockList = new object();
public MainWindow()
{
InitializeComponent();
this.DataContext = _searchInfo;
BindingOperations.EnableCollectionSynchronization(_searchInfo.List, _lockList);
}
- WPF async异步处理中实现 UI thread 的绑定同步
- async异步的 synchro同步
- async模块的异步处理
- async : false 配置实现异步请求同步
- async : false 配置实现异步请求同步
- HttpClient实现同步(sync)和异步(Async)
- ajax 的 async 的同步和 异步
- WPF 实现数据结构对象与UI控件的绑定
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面 .
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面 .
- BASE64编码原理解析
- POJ 2541 Binary Witch 状压DP
- Polya定理的应运
- React Native声明属性和属性确认
- java.lang.UnsupportedClassVersionError问题的解决方法
- WPF async异步处理中实现 UI thread 的绑定同步
- HDU1285确定比赛名次(拓扑排序)
- php+yar+apache+windows7
- jquery元素遍历
- 通讯录(静态版)一
- easyui-combobox 绑定数据的俩中方式
- 数据结构之线性表的链式表示及其实现
- Android自定义View:如何实现一个模拟时钟?
- hdu1013-字符相加