1

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

这是迭代代码:

Parallel.ForEach(this.AllParameters, par =>
{
  foreach (Parameter subPar in par.WrappedSubParameters)
  {
    subPar.IsSelected = false;
  }
  par.IsSelected = false;
});

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

  <DataGrid.RowStyle>
     <Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=OneWay}" />

在我之前的问题中,有人建议我使用并行迭代,但它会挂起 UI 并且永远不会返回。如何在 MVVM 中进行迭代之前暂停 UI。我是否以正确的方式编写代码?请建议。谢谢

4

1 回答 1

2

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

    public static bool CheckIsRunningOnUIThread()
    {
        if (Application.Current == null) return false;
        var dispatcher = Application.Current.Dispatcher;
        if (dispatcher==null) return false;
        return dispatcher.CheckAccess();
    }
于 2013-07-18T13:56:07.523 回答