Возможно ли попробовать / поймать всю программу на C #?
-
05-07-2019 - |
Вопрос
Программа на C # запускается:
Application.Run (new formClass ());
Я хотел бы попытаться поймать все это, чтобы поймать в ловушку любые неисследованные исключения. Когда я использую этот метод Run, исключения не перехватываются; управление возвращается только тогда, когда программа завершается после необработанного исключения.
Где я могу разместить try / catch, чтобы охватить всю программу? Спасибо!
Решение
Чтобы перехватить необработанные исключения Windows Form, подключите
AppDomain.UnhandledException
и Application.ThreadException
события.
Интересно: Неожиданные ошибки в управляемых приложениях
Другие советы
По сути, вы не можете перехватить все исключения при использовании процесса размещения CLR по умолчанию. Период. Это связано с тем, что AppDomain.UnhandledException
Событие является только уведомлением, вы не можете обработать исключение (что означает, что вы не можете предотвратить завершение приложения после обработки уведомления). Р>
Однако вы можете перехватить и обработать все исключения в потоке пользовательского интерфейса приложения WinForms, используя его Application.ThreadException
(и контролирует поведение с помощью UnhandledExceptionMode
). Другие потоки, которые генерируют исключение, не будут перехвачены этим обработчиком.
В общем, не стоит пытаться обрабатывать все исключения. Вы можете, однако, использовать
AppDomain.UnhandledException
для регистрации ошибки и / или выполнения важных задач по очистке (например, закрытие файловой базы данных или что-либо еще).