Как обрабатывать необработанные исключения в .NET COmpact Framework 3.5? - PullRequest
0 голосов
/ 19 января 2010

В .NET CF существует ли какое-либо событие, подобное Application.DispatcherUnhandledException , которое позволяет нам регистрировать все необработанные исключения для ведения журнала, а также сохранять приложение открытым без сбоев?

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

// Prevent default unhandled exception processing

e.Handled = true;

Событие AppDomain.CurrentDomain.UnhandledException позволяет перехватывать необработанные исключения, но, похоже, нет способа остановить закрытие приложения.

Мне нужна аналогичная функциональность, предоставляемая DispatcherUnhandledException в .NET CF. Пожалуйста, помогите мне.

1 Ответ

5 голосов
/ 19 января 2010

Неа. У вас есть возможность регистрировать любые необработанные исключения через событие AppDomain.CurrentDomain.UnhandledException. Однако это не приведет к исключению и позволит продолжить.

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

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

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

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

...