Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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失败_C#_Wpf_Multithreading_Mvvm_Dispatcher - Fatal编程技术网

C# Dispatcher.Invoke失败

C# Dispatcher.Invoke失败,c#,wpf,multithreading,mvvm,dispatcher,C#,Wpf,Multithreading,Mvvm,Dispatcher,更新视图时,我遇到了一个问题 我有两个数据网格,必须在其中动态添加列。为此,我向DataGrid添加了一个附加属性,该属性绑定到ObservableCollection,然后编写了一个自定义ObjectToDataGridColumnConverter,将一个对象(主要是字符串)转换为DataGridColumn,然后将这个新列添加到DataGrid 它与我的两个数据网格中的一个很好地工作。另一个(首先更新)会在 var grid = source as DataGrid; grid.Colum

更新视图时,我遇到了一个问题

我有两个数据网格,必须在其中动态添加列。为此,我向DataGrid添加了一个附加属性,该属性绑定到
ObservableCollection
,然后编写了一个自定义ObjectToDataGridColumnConverter,将一个对象(主要是字符串)转换为DataGridColumn,然后将这个新列添加到DataGrid

它与我的两个数据网格中的一个很好地工作。另一个(首先更新)会在

var grid = source as DataGrid;
grid.Columns.Add(col);
除无效操作外:

调用线程无法访问此对象,因为其他线程拥有它

即使我尝试
Application.Current.Dispatcher.Invoke(新操作(()=>grid.Columns.Add(col))
它也会以相同的异常中断


我的另一个DataGrid使用相同的代码添加其列,并且工作正常。即使没有对Dispatcher对象的任何调用。

如果ObservableCollection在后台线程中更新,您确实应该通过Dispatcher调用在UI线程中添加新列。但是它也应该在UI线程中创建,因为它本身就是一个DispatcherObject。包含
col
的集合是在我的
ObjectToDataGridColumnConverter
中创建的,因此我假设UI线程拥有此集合它在发生相同异常的地方中断?您的代码有多个对象,并且完全有可能您在非I线程之间获得不同对象的异常nvoke和Invoke场景。您应该提供更具体的问题描述以及更好的代码示例。请查看它在
网格.列上的中断。使用相同的
invalidoOperationException添加(col)
。我确信它是正确的对象,因为引用是相等的。