Правильный способ обработки исключений в UserControl - PullRequest
2 голосов
/ 13 ноября 2008

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

спасибо заранее.

Хуан Самудио

Ответы [ 4 ]

3 голосов
/ 13 ноября 2008

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

Вы также можете взглянуть на Дизайн по контракту , методологию для объявления необходимых предварительных условий и гарантированных постусловий. Это может звучать академично, но это приводит к более надежному коду.

UPDATE: Хорошее введение - http://se.ethz.ch/~meyer/publications/computer/contract.pdf

С уважением, Тамберг

0 голосов
/ 13 ноября 2008

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

Имейте в виду, что создание исключения - довольно дорогой процесс и (как я уже говорил в прошлом) исключения должны быть зарезервированы для действительно "исключительных" неожиданных случаев ...

С наилучшими пожеланиями,
Frank

0 голосов
/ 13 ноября 2008

Обрабатывать только те исключения, о которых вы знаете и знаете, что делать. Не беспокойтесь об общих обработчиках, таких как MessageBox. Просто дайте ему распространиться на приложение, где есть больше контекста для диагностики ошибки. Они несут ответственность за обнаружение любых исключений, чтобы приложение не зависало. В случае исключения, с которым они ничего не могут сделать, потому что это связано с внутренними элементами элемента управления, вы должны разобраться с этим самостоятельно, и, если это частично ошибка пользователя, обернуть исключение сообщением о том, что отсутствует, с исключение доступно через свойство InnerException.

0 голосов
/ 13 ноября 2008

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

...