我有一个包含近1100个元素的通用List。这些元素中大约有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}" />
在我的previous question中,我被建议使用并行迭代,但它会挂起UI并且永远不会返回。如何在MVVM中进行迭代之前暂停UI。我是以正确的方式做代码吗?请建议。 感谢
答案 0 :(得分: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();
}