WPF передает сообщение об исключении из потока ThreadPool в пользовательский интерфейс - PullRequest
2 голосов
/ 07 марта 2011

Всякий раз, когда возникает исключение в потоке потоков.Я думал, что вызову событие, на которое поток пользовательского интерфейса будет отвечать.Но мне нужно передать сообщение об исключении.Может кто-нибудь дать мне идею сделать это?

Ответы [ 2 ]

0 голосов
/ 07 марта 2011

Вы можете просто наблюдать необработанные исключения в домене приложения с событиями:

Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

Но, вероятно, было бы лучше обернуть поток в try catch и вручную перенаправить исключение обратно в поток пользовательского интерфейса. Если у вас есть ссылка на Dispatcher, вы можете использовать ее для передачи исключения обратно в поток пользовательского интерфейса. Есть более простые способы, если вы используете TPL, но сделать это вручную вы должны:

_dispatcher = Dispatcher.CurrentDispatcher;

Перед запуском фонового потока сохраните ссылку на Dispatcher где-нибудь, к которому фоновый поток сможет получить доступ.

private void FailedWorking(Exception ex)
{
    _dispatcher.BeginInvoke(DispatcherPriority.Normal, (NotifyWorkerFailed)_notifyFailedMethod, ex);
}

Затем, когда вы хотите вызвать исключение в потоке пользовательского интерфейса, используйте Dispatcher.BeginInvoke и либо передайте ему метод делегата, который будет обрабатывать исключение, либо вы можете просто создать действие, которое выбрасывает

Вы можете найти множество других примеров поиска Диспетчер

0 голосов
/ 07 марта 2011

Если вы обработали исключение в потоке, вы можете использовать сообщение об ошибке в блоке catch и отправить его диспетчеру потока пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...