Когда DispatcherUnhandledException и AppDomain.UnhandledException недостаточно (приложение WPF)? - PullRequest
3 голосов
/ 26 августа 2010

Я подключил оба из них, но иногда мое приложение по-прежнему зависает и просто выдает в Windows диалог «исключение произошло». Когда я нажимаю ОК, приложение просто закрывается. При каких обстоятельствах исключения не будут обработаны этими двумя обработчиками (в приложении WPF)?

Я должен упомянуть, что я делаю кучу COM-взаимодействия, так что это всегда подозрительно: -)

Ответы [ 2 ]

3 голосов
/ 26 августа 2010

В .NET существуют неуловимые исключения. Это исключения, которые генерируются непосредственно CLR, когда он попадает в состояние, которое он считает полностью неустранимым. Одним из примеров является StackOverflowException. Философия Microsoft заключается в том, что это состояние не является возможным исключительным обстоятельством, оно должно быть ошибкой в ​​вашем коде и поэтому не должно обрабатываться. В этом случае исключение будет немедленно распространяться вплоть до сообщения об ошибке закрытия приложения.

3 голосов
/ 26 августа 2010

Есть несколько причин, по которым необработанное исключение не будет вызвано ни одной из них.

Dispatcher.UnhandledException вызывается только для исключений, которые происходят в виде диспетчера, когда метод был введен посредством вызова Invoke или BeginInvoke ( документация ). Поэтому исключения в других потоках или методах, которые не были вызваны таким образом, пропустят этот обработчик событий.

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

Я не уверен, что любой из них будет иметь отношение к вам. Самый простой способ проверить это - просто подключить отладчик и посмотреть, какой вывод он выдает.

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