обнаруживать ошибки / всплывающие окна - PullRequest
6 голосов
/ 16 мая 2011

Мое приложение не охватывает все сценарии исключений.Во время выполнения иногда всплывает окно с сообщением об ошибке, например: «Исключение из-за пустой ссылки на систему» ​​или «Файл или каталог повреждены и не читаются».Как только появляется окно ошибок, оно не исчезает, пока пользователь не ответит кнопками.

Я хочу зафиксировать эти исключения и не хочу показывать эти окна ошибок пользователям.

Ответы [ 4 ]

4 голосов
/ 16 мая 2011

Вы можете перехватить все исключения на уровне AppDoamin, подписавшись на событие UnhandledException

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
4 голосов
/ 16 мая 2011

Вам нужно обернуть свой код в блок try {} catch (Exception e) {}, чтобы вы могли сами отловить ошибку.

пример:

try
{
  // all of my code
}
catch ( Exception e )
{
  // show my own error dialog
}
1 голос
/ 16 мая 2011

Похоже, вам нужно вернуться к своему коду и посмотреть на обработку исключений. Либо есть разделы кода, которые не находятся внутри блока try/catch, либо у вас есть блоки try/catch, которые не обрабатывают все возможные исключения.

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

Вот хорошая статья об использовании try/catch:

http://msdn.microsoft.com/en-us/library/ms173160.aspx

При реализации try/catch убедитесь, что вы также решили ввести finally для очистки любой информации о соединении или другого кода, который должен быть закрыт. Это будет выглядеть так:

try
{
   //Your existing code
}
catch (Exception ex)
{
   //Here is where you log the error - ex contains your entire exception so use that in the log
}
finally
{
   //Clean up any open connections, etc. here
}

Обратите внимание, что блок catch ловит универсальный Exception, поэтому все ошибки, которые не были обнаружены выше (в более специфических блоках), должны быть здесь перехвачены.

0 голосов
/ 16 мая 2011

Попробуйте заменить все ваши MessageBox.Show() заявления чем-то вроде Logger.LogInfo(ex.Message);.Используйте решение для ведения журналов, например Log4Net , возможно.

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