Какова наилучшая практика для обработки всех Исключений в приложении WPF?

Есть ли способ обработки всех исключений ошибок и сбоев в приложении WPF?

Я знаю о DispatcherUnhandledException, но он обрабатывает только исключения в потоке пользовательского интерфейса, не так ли?

Есть ли способ перехватывать и регистрировать все исключения в других потоках и ошибки связывания?

Ответ 1

Имейте в виду, что Microsoft не рекомендует ловить все исключения, вместо этого они рекомендуют поймать только те исключения, которые вы знаете (или ожидаете, что они произойдут в некотором месте). Даже если вы хотите получить логотип "Certified for Microsoft [Windows | Vista]", вы не должны улавливать неизвестные исключения, и такие исключения должны идти в Wer.

Ответ 2

AppDomain.CurrentDomain.UnhandledException

Будет перехватывать любые необработанные исключения для текущего потока. Вот как мы справляемся с этим в нашем приложении.

Ошибки BindingErrors всегда обрабатываются и регистрируются в окне вывода. Перед выпуском мы проверяем окно вывода на наличие ошибок привязки и исправляем столько, сколько можем.

Однако я считаю, что вы не хотели бы рассматривать ошибки привязки как необработанные, так как они в основном исправимы и должны исправляться как можно лучше перед каждым выпуском. Вы можете изменить "Отладка"> "Исключения" в Visual Studio, чтобы он вызывал BindingFailure для получения более конкретной информации.

Ответ 3

Да, есть 3 места:

  • поместите Application.Run() в try... catch
  • DispatcherUnhandledException
  • AppDomain.CurrentDomain.UnhandledException

В любом случае вы должны отобразить сообщение "пожалуйста-простите меня" и предложите отправить отчет об ошибке.

Служба на вашем сервере должна ответить "спасибо за отправку отчета об ошибке" или "проблема уже исправлена ​​в следующей версии. обновите '