C# 在异步/等待更改之后,使用Dispatcher.Invoke()不会';t解决除调度程序线程以外的CollectionView更改
我对我的应用程序进行了更改,以便在应用程序打开时在后台线程上加载数据(使用异步/等待)。现在,在应用程序完全加载后,当尝试更新绑定属性时,我遇到以下异常: “System.NotSupportedException”类型的首次意外异常 发生在PresentationFramework.dll中 其他信息:此类型的CollectionView不支持 从不同于的线程更改其SourceCollection 调度程序线程 这段代码在async/await更改首先更新该属性之前工作。我尝试在代码中添加Dispatcher.Invoke(),但出现了相同的错误:C# 在异步/等待更改之后,使用Dispatcher.Invoke()不会';t解决除调度程序线程以外的CollectionView更改,c#,wpf,async-await,C#,Wpf,Async Await,我对我的应用程序进行了更改,以便在应用程序打开时在后台线程上加载数据(使用异步/等待)。现在,在应用程序完全加载后,当尝试更新绑定属性时,我遇到以下异常: “System.NotSupportedException”类型的首次意外异常 发生在PresentationFramework.dll中 其他信息:此类型的CollectionView不支持 从不同于的线程更改其SourceCollection 调度程序线程 这段代码在async/await更改首先更新该属性之前工作。我尝试在代码中添加Di
System.Windows.Application.Current.Dispatcher.Invoke(() =>
{
this._customVariableGroups[index] = savedGroup;
});
由于此字段最初是在后台线程上更新的,这是否会导致从主线程更新它时出现问题?注意,在VisualStudio的“线程”窗口中,此代码在主线程上执行。我不知道还能做些什么来让它起作用
这是一个领域:
private ObservableCollection<CustomVariableGroup> _customVariableGroups;
私有ObservableCollection\u CustomVariableGroup;
听起来您的集合视图是在后台线程上创建的,这通常不是一个好主意
如果您正在使用
async
/wait
(并且您的数据加载支持异步操作)加载数据,则不需要使用后台线程。听起来您的集合视图是在后台线程上创建的,这通常不是一个好主意
如果使用
async
/wait
(并且数据加载支持异步操作)加载数据,则不需要使用后台线程。@BobHorn:该字段需要在UI线程上构造。如果您的数据加载是完全async
(例如,如果您是从数据库加载,则使用async
EF6查询;如果您是从web服务加载,则使用HttpClient
)——这样就完全不需要任务。运行(或任何后台线程)。但是,保持数据加载的当前状态(在后台线程上阻塞)并让它将数据返回到UI可能更容易。只需返回“常规”数据,如T[]
或List
,而不是observedcollection
@BobHorn:该字段需要在UI线程上构造。如果您的数据加载是完全async
(例如,如果您是从数据库加载,则使用async
EF6查询;如果您是从web服务加载,则使用HttpClient
)——这样就完全不需要任务。运行(或任何后台线程)。但是,保持数据加载的当前状态(在后台线程上阻塞)并让它将数据返回到UI可能更容易。只需返回“常规”数据,如T[]
或List
,而不是observedcollection
。