2016-02-09 6 views
0

У меня есть datagrid. Я хочу добавить столбцы в результате события. Так что яOnEvent datagrid column add fail

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

Проблема была связана с тем, что я вызывал этот код в функция. Поэтому я добавил диспетчера к функции, и она сработала. Таким образом, это то же самое решение, что и ваше. – Patrick