Различие между UnhandledException и DispatcherUnhandledException в.NET

Каково различие между AppDomain. UnhandledException и Приложение. DispatcherUnhandledException в.NET?

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

24
задан Venkat 9 May 2018 в 08:02
поделиться

3 ответа

Application.DispatcherUnhandledException будет обрабатывать исключения, брошенные на главный поток UI в приложении WPF. AppDomain.UnhandledException будет обрабатывать исключения, брошенные в любом потоке и никогда не пойманные. Сюда входят потоки, которые вы создаете вручную, или главный поток в консольном приложении. WPF перехватывает исключения в потоке пользовательского интерфейса, поэтому вы не увидите их в AppDomain.UnhandledException.

Также обратите внимание, что необработанные исключения обычно завершают выполнение, поэтому после появления AppDomain.UnhandledException ваша программа немедленно завершится. Напротив, Application.DispatcherUnhandledException перехватывает исключения и позволит вашей программе продолжить работу.

13
ответ дан 29 November 2019 в 00:16
поделиться

http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

говорит:

«DispatcherUnhandledException вызывается приложением для каждого исключения, которое не обрабатывается код, работающий в основном потоке пользовательского интерфейса ».

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

говорит:

« Это событие может быть обработано в любой домен приложения. Однако событие не обязательно возникает в домене приложения, в котором возникло исключение »

Итак, DispatcherUnhandledException предназначен для исключений потока пользовательского интерфейса, а AppDomain.UnhandledException - для всего остального.

Надеюсь, это поможет!

2
ответ дан 29 November 2019 в 00:16
поделиться

DispatcherUnhandledException возникает только потоком пользовательского интерфейса и только в том случае, если исключение было вызвано во время выполнения события. Есть небольшая традиция специально обрабатывать такие исключения, в Windows Forms это тоже есть с Application.ThreadException (плохо названо, не имеет отношения к потокам).

Причина в том, что существует незначительный шанс обработать исключение и сохранить программу в рабочем состоянии, поскольку обработчики событий пользовательского интерфейса не всегда слишком сильно изменяют состояние программы. Это требует больших порций принятия желаемого за действительное. Windows Forms доводит это до крайности, отображая ThreadExceptionDialog с кнопкой «Продолжить», позволяя пользователю игнорировать исключение. WPF этого не делает, вам придется написать такой диалог самостоятельно. Поэтому и есть мероприятие.

По умолчанию DispatcherUnhandledException не перехватывает исключение. Так что вы можете проигнорировать это, следующим срабатывает исключение AppDomain.UnhandledException.

8
ответ дан 29 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: