异步/等待更改后,使用Dispatcher.Invoke()不解决Dispatcher线程以外的CollectionView更改

时间:2013-11-12 21:53:23

标签: c# wpf async-await

我在应用程序打开时对我的应用程序进行了更改以在后台线程上加载数据(使用async / await)。现在,在应用程序完全加载后,在尝试更新绑定属性时,我遇到了这个异常:

  

“System.NotSupportedException”类型的第一次机会异常   发生在PresentationFramework.dll

中      

其他信息:此类CollectionView不支持   从不同于的线程更改其SourceCollection   调度程序线程。

此代码在异步/等待更改首先更新该属性之前正在运行。我尝试在代码周围添加Dispatcher.Invoke(),但我得到了同样的错误:

System.Windows.Application.Current.Dispatcher.Invoke(() =>
{
    this._customVariableGroups[index] = savedGroup;
});

由于此字段最初是在后台线程上更新的,是否会导致从主线程更新它的问题?请注意,在Visual Studio的线程窗口中,此代码正在主线程上执行。我不知道还有什么可以让它发挥作用。

这是字段:

private ObservableCollection<CustomVariableGroup> _customVariableGroups;

1 个答案:

答案 0 :(得分:4)

听起来你的集合视图是在后台线程上创建的,这一般不是一个好主意。

如果您使用async / await加载数据(并且您的数据加载支持异步操作),那么您不需要使用后台线程。