2016-02-09 50 views
0

我有一个数据网格。我想添加列作为事件的结果。 所以我做OnEvent datagrid列添加失败

for (int iii = 1; iii <= 4; ++iii) 
{ 
    var dtgColumn = new DataGridTextColumn(); 
    dtgColumn.Header = "AAA" 
    Dispatcher.Invoke((Action)(() => { dtgResults.Columns.Add(dtgColumn); })); 
} 

但是,尽管使用一个调度程序我得到这个错误:

The calling thread cannot access this object because a different thread owns it.

感谢您的帮助 帕特里克 }

+0

尝试使用Application.Current.Dispatcher。有关更多详细信息,请参阅此处:http://stackoverflow.com/questions/10448987/dispatcher-currentdispatcher-vs-application-current-dispatcher –

+0

唉,不像以前那样工作 – Patrick

+0

dtgResults定义在哪里,它在哪里实例化? (哪个线程?) –

回答

1

它看起来像一个问题不是一个UI控制本身,但dtgColumn对象创建。您正在一个线程上创建UI元素,并将其添加到主线程上的UI元素。

Dispatcher.Invoke((Action)(() => { 
     var dtgColumn = new DataGridTextColumn(); 
     dtgColumn.Header = "AAA" 

     dtgResults.Columns.Add(dtgColumn); 
    })); 

所以被创建并添加拥有UI父控件的线程上的对象:喜欢

更改代码。

+1

这个问题与我在一个叫做代码的事实有关功能。所以我将Dispatcher添加到函数中,并且它工作正常。所以它和你的解决方案是一样的。 – Patrick