首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用大表阻塞我的UI线程来填充DataGrid

用大表阻塞我的UI线程来填充DataGrid
EN

Stack Overflow用户
提问于 2019-03-28 02:35:14
回答 1查看 553关注 0票数 2

我花了一些时间研究和观察最佳实践,以避免在尝试处理UI线程上的数据时阻塞UI线程。具体地说,我在可能的地方使用异步/等待。但是,当通过绑定填充DataGrid时,我注意到我的UI在命令处理完成并将处理传递回UI后冻结。

XAML

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding EndpointModel.DataView}"
          AutoGenerateColumns="True" IsReadOnly="True">            
</DataGrid>

DataModel命令执行:

代码语言:javascript
复制
public async void CommandExecute()
{
    ...

    JsonData = await accessor.GetDataAsync(new Endpoint.Params().Universe(universe)
                                                                .WithStart(start)
                                                                .WithEnd(end));

    // Creates a very large DataTable within my display (30 x 350)
    var grid = EndpointModel.CreateDataGrid(JsonData);      
    EndpointModel.DataView = grid.AsDataView();
}

我已经遍历了代码,观察了处理时间,放置了调试器消息,处理看起来很正常。await语句大约需要1.5秒,最后的网格处理是几毫秒。然而,当我从'CommandExecute()‘返回时,UI大约需要3-5秒才能响应。数据可以很好地填充--只是永远都需要。我不知道这是不是意料之中的事,也不知道我是否能控制它。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-03-28 08:28:56

WPF DataGrid以其性能问题而闻名。您可以尝试查看此thread的答案。基本上,最推荐的选择是:使用Grid。尤其是在行数为数千行的情况下。或者,如果您想保留数据网格,有一些方法可以减少加载时间,例如

代码语言:javascript
复制
EnableColumnVirtualization = true
EnableRowVirtualization = true

另外设置固定的宽度和/或高度,datagrid可能会在每次更新数据时尝试重新计算所需的宽度和高度。我会检查其他线程,以根据您的需要优化您的数据网格。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55384325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档