Проблемы с вызовом Dispatcher в WPF - PullRequest
2 голосов
/ 06 февраля 2009

У меня есть некоторый код пользовательского интерфейса, который необходимо обновить из моей фоновой ветки докладчика. Итак, я делаю следующее: из фоновой темы я установил свое свойство в пользовательском интерфейсе:

_ui.ConnectionStatus = "A";

тогда мой набор выглядит следующим образом:

public string ConnectionStatus
{
    set
    {
        if (Dispatcher.CheckAccess())
            ConnectionStatusTxt.Content = value;
        else
        {
            Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
                              {ConnectionStatusTxt.Content = value;}));
        }
    }
}

Я получаю следующую ошибку:

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

Насколько я понимаю, Dispatcher заботится о вызове в разных потоках, поэтому эта ошибка меня немного озадачивает. Спасибо!

Ответы [ 2 ]

5 голосов
/ 06 февраля 2009

Еще один вопрос: какой тип является значением? это строка? Я мог бы предположить, что ошибка может быть в том, что значение на самом деле является UIElement (может быть, Label?), Который вы создаете, и в этом случае исключение относится к объекту значения, а не к вашему пользовательскому элементу управления.

0 голосов
/ 06 февраля 2009

Вы не говорите, какой объект выполняет этот установщик, но похоже, что Dispatcher этого объекта отличается от диспетчера ConnectionStatusTxt, то есть объект, содержащий установщик, принадлежит другому потоку из элемента управления ConnectionStatusTxt.

Попробуйте использовать ConnectionStatusTxt.Dispatcher в своих инструкциях CheckAccess и Invoke.

...