Как изящно закрыть форму, если в этой форме происходит исключение в C # - PullRequest
2 голосов
/ 08 сентября 2011

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

Прямо сейчас я следую принципу «не пишите try / catch везде, чтобы отлавливать ошибки», и это делает мой код чище, но вызывает сбой всего приложения при наличии исключения NullPointerException.

Лучшим решением будет «локальный обработчик ошибок», который будет иметь каждая форма, который будет собирать любые исключения на этом уровне и уничтожать там форму, а не пузыриться и убивать все приложение.

У кого-нибудь есть идеи?

Ответы [ 2 ]

5 голосов
/ 08 сентября 2011

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

Тогда вам нужно исправить NullReferenceException(s), а не придумать какой-нибудь замысловатый механизм для перехвата исключений в глобальномуровень и возврат, чтобы найти форму, которая вызвала его.Вы должны просто (попытаться) спроектировать свой код так, чтобы нулевые ссылки не могли появиться, или, если они это делают, это может быть обработано изящно.

Если у вас есть сценарий, который вызывает сбой, исправьтеэто, не игнорируйте это.Как вы можете гарантировать, что закрытие формы приведёт вашу программу в согласованное состояние, сейчас и в будущем?(Подсказка: нельзя)

3 голосов
/ 08 сентября 2011

Можете ли вы извлечь свои формы из общего базового класса, чтобы они могли использовать один и тот же обработчик ошибок? У нас есть базовая форма, которая регистрирует исключение, отображает ошибку, а затем закрывает форму (что необязательно в режиме отладки). Каждое пользовательское событие (например, button_click) помещается в try / catch, который вызывает базовый обработчик ошибок.

Также, если вы не знали, есть глобальные обработчики исключений:

Событие Application.ThreadException

Событие AppDomain.UnhandledException

Событие WindowsFormsApplicationBase.UnhandledException (VB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...