2013-07-18 29 views
1

我有一个包含近1100个元素的通用列表。这些元素中几乎10个包含1000个元素(相同类型)。元素绑定到UI DataGrid。对这个列表进行判断需要很长的时间5-6秒(因为我在迭代中操作的属性是数据绑定到DataGrid属性的)。Parallel.ForEach在处理大列表时将MVVM中的布局挂起

这里是迭代代码:

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}" /> 

正如我previous question我建议使用并行迭代,但它挂在UI和永不返回。如何在MVVM中进行迭代之前暂停UI。我是否以正确的方式执行代码?请提出建议。 谢谢

回答

2

你可以在这里找到你的答案:link基本上是,你不能在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(); 
    }