Какова наилучшая практика для обработки всех Исключений в приложении 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
В любом случае вы должны отобразить сообщение "пожалуйста-простите меня" и предложите отправить отчет об ошибке.
Служба на вашем сервере должна ответить "спасибо за отправку отчета об ошибке" или "проблема уже исправлена в следующей версии. обновите '
Ответ 4
Здесь можно найти хорошее решение с помощью NLog:
Вход в .NET с помощью NLog (файл конфигурации по умолчанию, перехват всех исключений и маршрут к журналу,...)