Правильная обработка всех исключений

100
26 июля 2021, 11:30

В методе OnStartup определяю следующий код:

AppDomain.CurrentDomain.UnhandledException += delegate(object sender, UnhandledExceptionEventArgs args) {
//Запись в лог
                                                      };

Судя по документации он должен отлавливать все ранее не обработанные исключения, он срабатывает, идет запись в лог, а после этого приложение падает. Когда я запустил приложение в режиме отладки и сгенерировал исключение, оно вызвало обработчик, но после этого в Visual Studio появился помощник исключения, как будто исключение возникло без какой-либо обработки.

Что я делаю не так?

UDP. Как модифицировать код так, что-бы не только получать уведомление об исключениях, но еще их перехватывать?

Answer 1

Можно перехватывать необработанные исключения на разных уровнях:

  1. AppDomain.CurrentDomain.UnhandledException - перехватывает из всех потоков в приложении.
    Исключение нельзя обработать, можно только "усыпить" поток навсегда, для предотвращения падения.
  2. Dispatcher.UnhandledException - перехватывает из одного конкретного потока диспетчера UI.
    Исключение можно обработать и не дать приложению упасть.
  3. Application.Current.DispatcherUnhandledException - перехватывает из потока диспетчера UI main в приложении WPF.
    Исключение можно обработать и не дать приложению упасть.
  4. TaskScheduler.UnobservedTaskException - перехватывает в каждом AppDomain, который использует планировщик задач для асинхронных операций.
    Исключение можно обработать и не дать приложению упасть.

Выбор между № 2 и № 3 зависит от того, используете ли вы более одного потока WPF. Это довольно экзотическая ситуация, и если вы не уверены, так это или нет, то, скорее всего, нет.

Источник

READ ALSO
Остановка System.Threading.Timer

Остановка System.Threading.Timer

Возможно очень глупый вопрос от новичкаБуду рад прочесть все что скинете

191
Генерация паролей

Генерация паролей

Есть алфавит

224
Как отобразить результат XmlDiff?

Как отобразить результат XmlDiff?

Использую nuget библиотеку MicrosoftXmlDiffPatch, получаю результат сравнения двух xml с помощью XmlDiff

175
Как хранить ссылочные данные

Как хранить ссылочные данные

Что бы было проще, объясню на примере чатовЕсть пользовать П1, и есть пользователь П2, они между собой ведут беседу, естественно данные об их беседе...

236