wpf - UI 在批量创建对象时冻结,即使使用任务
问题描述
我有一种方法OnLoadShapeFilePolygonsCommand()
可以从文件中读取多边形(几何)细节并创建一些对象。然后将它们加载到绑定到数据网格的可观察集合中。
在所有这些处理过程中,我正在显示一个进度条。刚刚添加了一个IsIndeterminate
属性设置为的进度条true
,当所有数据加载完毕后,我将进度条的可见性设置为false
.
我的问题是,在创建多边形对象时,UI 被冻结(进度条挂起)。
我在这里做错了吗?请帮忙。
private async void OnLoadShapeFilePolygonsCommand()
{
// ...
// some code
await Task.Factory.StartNew(() =>
{
List<Ploygon> collection = new List<Ploygon>();
foreach (Graphic g in graphics)
{
collection.Add(new Ploygon(g,.. .. ..);
}
return collection;
},CancellationToken.None, TaskCreationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext())
.ContinueWith((antecedent) =>
{
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, ThreadStart)delegate ()
{
// MapPolygons is observable collection binded to datagrid.
MapPolygons.AddRange(antecedent.Result);
//...
});
},scheduler);
}
}
解决方案
你为什么await
使用Task.Factory.StartNew
and ContinueWith
?
试试这个:
var collection = await Task.Run(
() => graphics.Select(g => new Ploygon(g,.. .. ..)).ToList());
// MapPolygons is observable collection binded to datagrid.
MapPolygons.AddRange(collection);
...
推荐阅读
- ajax - 如何向 Rally Webhooks API 发出 Ajax 请求?是否启用了 CORS?
- node.js - 如何在nodejs中对带有标题的文本文件进行排序
- python - 如何在某行代码后更改变量的值 - python
- image - 在 PIL 中的场景图像上叠加文本图像
- c - C 编程使用数据结构(优先队列)在队列中存储和显示字符和整数
- authentication - 区块链数据库的认证过程
- php - 项目中用于选择查询的单个函数,其执行或加载时间是快是慢
- php - 如何在php中计算数组或json中的重复值
- excel - 使用 Excel VBA 从草稿发送多个项目时出错
- c++ - C++ 电话号码字母拨号程序 - 语法错字?还是非ASCII字符?