首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parallel.ForEach在处理大列表时挂起了MVVM中的布局

Parallel.ForEach在处理大列表时挂起了MVVM中的布局
EN

Stack Overflow用户
提问于 2013-07-18 16:29:02
回答 1查看 269关注 0票数 1

我有一个包含近1100个元素的通用列表。这些元素中几乎有10个都包含1000个元素(类型相同)。这些元素被绑定到UI DataGrid。迭代这个列表需要5-6秒的时间(因为我在迭代中操作的属性是绑定到DataGrid属性的数据)。

以下是迭代代码:

代码语言:javascript
复制
Parallel.ForEach(this.AllParameters, par =>
{
  foreach (Parameter subPar in par.WrappedSubParameters)
  {
    subPar.IsSelected = false;
  }
  par.IsSelected = false;
});

Xaml中的代码片段如下所示:

代码语言:javascript
复制
  <DataGrid.RowStyle>
     <Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=OneWay}" />

在我的previous question中,有人建议我使用并行迭代,但它挂起了UI,再也不会返回。在MVVM中进行迭代之前,如何挂起UI。我用正确的方式写代码了吗?请提个建议。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 21:56:08

你可以在这里找到你的答案:link基本上问题是,你不能在UI线程上调用你的Parallel.ForEach。如果您不确定当前线程,则可以使用如下方法:

代码语言:javascript
复制
    public static bool CheckIsRunningOnUIThread()
    {
        if (Application.Current == null) return false;
        var dispatcher = Application.Current.Dispatcher;
        if (dispatcher==null) return false;
        return dispatcher.CheckAccess();
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17718376

复制
相关文章

相似问题

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