C# Dispatcher.Invoke失败
更新视图时,我遇到了一个问题 我有两个数据网格,必须在其中动态添加列。为此,我向DataGrid添加了一个附加属性,该属性绑定到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
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)
。我确信它是正确的对象,因为引用是相等的。