我有一个包含近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}" />在我的previous question中,有人建议我使用并行迭代,但它挂起了UI,再也不会返回。在MVVM中进行迭代之前,如何挂起UI。我用正确的方式写代码了吗?请提个建议。谢谢
发布于 2013-07-18 21:56:08
你可以在这里找到你的答案: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();
}https://stackoverflow.com/questions/17718376
复制相似问题