Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在异步/等待更改之后,使用Dispatcher.Invoke()不会';t解决除调度程序线程以外的CollectionView更改_C#_Wpf_Async Await - Fatal编程技术网

C# 在异步/等待更改之后,使用Dispatcher.Invoke()不会';t解决除调度程序线程以外的CollectionView更改

C# 在异步/等待更改之后,使用Dispatcher.Invoke()不会';t解决除调度程序线程以外的CollectionView更改,c#,wpf,async-await,C#,Wpf,Async Await,我对我的应用程序进行了更改,以便在应用程序打开时在后台线程上加载数据(使用异步/等待)。现在,在应用程序完全加载后,当尝试更新绑定属性时,我遇到以下异常: “System.NotSupportedException”类型的首次意外异常 发生在PresentationFramework.dll中 其他信息:此类型的CollectionView不支持 从不同于的线程更改其SourceCollection 调度程序线程 这段代码在async/await更改首先更新该属性之前工作。我尝试在代码中添加Di

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

“System.NotSupportedException”类型的首次意外异常 发生在PresentationFramework.dll中

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

这段代码在async/await更改首先更新该属性之前工作。我尝试在代码中添加Dispatcher.Invoke(),但出现了相同的错误:

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