Возможно ли попробовать / поймать всю программу на C #? - PullRequest
23 голосов
/ 21 октября 2009

Программа на C # запускается:

Application.Run (new formClass ());

Я хотел бы попытаться поймать все вокруг, чтобы поймать в ловушку любые необработанные исключения. Когда я использую этот метод Run, исключения не перехватываются; управление возвращается только тогда, когда программа завершается после необработанного исключения.

Где я могу поместить try / catch, чтобы охватить всю программу? Спасибо!

Ответы [ 2 ]

38 голосов
/ 21 октября 2009

Чтобы перехватить необработанные исключения Windows Form, подключите AppDomain.UnhandledException и Application.ThreadException события.

Интересы: Неожиданные ошибки в управляемых приложениях

8 голосов
/ 21 октября 2009

По сути, вы не можете перехватить все исключения при использовании процесса размещения CLR по умолчанию. Период. Это происходит потому, что событие AppDomain.UnhandledException является только уведомлением, вы не можете обработать исключение (что означает, что вы не можете предотвратить завершение приложения после обработки уведомления).

Однако вы можете перехватить и обработать все исключения в потоке пользовательского интерфейса приложения WinForms, используя его обработчик Application.ThreadException управляют поведением через UnhandledExceptionMode). Другие потоки, которые генерируют исключение, не будут перехвачены этим обработчиком.

В общем, не стоит пытаться обрабатывать все исключения. Вы можете, однако, использовать AppDomain.UnhandledException для регистрации ошибки и / или выполнения важных задач по очистке (например, закрытие файловой базы данных или что-то еще).

...