Создание другого потока для получения текущего окна (System.Windows.Application.Current.MainWindow) - PullRequest
1 голос
/ 30 августа 2011

Мне нужно текущее окно, чтобы показать пользовательский MessageBox.Я делаю это:

Window owner = System.Windows.Application.Current.MainWindow;

иногда это работает.Там, где это не работает, я получаю эту ошибку:

System.InvalidOperationException: {"The calling thread cannot access this object because a different thread owns it."}
InnerException: null
Message: The calling thread cannot access this object because a different thread owns it.

Будет ли решение отправить этот вызов в отдельный поток, а не основнойЕсли да, то как мне это сделать?Спасибо.

Ответы [ 2 ]

10 голосов
/ 30 августа 2011

Вам потребуется использовать Dispatcher и Invoke / BeginInvoke, чтобы перенаправить обратный вызов в поток пользовательского интерфейса:

System.Windows.Application.Current.Dispatcher.Invoke((Action)() =>
{
       Window owner = System.Windows.Application.Current.MainWindow;

       // Use owner here - it must be used on the UI thread as well..
       ShowMyWindow(owner);
});
0 голосов
/ 05 сентября 2018

Рабочая альтернатива ответа Рида Копси:

System.Windows.Application.Current.Dispatcher.Invoke((Action)delegate
{
       Window owner = System.Windows.Application.Current.MainWindow;

       // Use owner here - it must be used on the UI thread as well..
       ShowMyWindow(owner);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...