Обработка исключений в SCSF - PullRequest
1 голос
/ 27 ноября 2009

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

Application.ThreadException += new ThreadExceptionEventHandler(new ThreadExceptionHandler().ApplicationThreadException);

Обработчик события: -

public class ThreadExceptionHandler
    {
        public void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "An exception occurred:", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

Работает нормально. Я могу поймать все исключения приложений в этом блоке.

Но проблема в том, что после обработки исключения код снова отправляется и снова выполняет тот же код генерации исключения. Это происходит до тех пор, пока я не получу окно сообщения Windows для отправки информации об ошибке в Microsoft.

Может кто-нибудь, пожалуйста, помогите мне сказать, где я могу пойти не так.

Заранее спасибо

Викрам

Примечание: - В настоящее время я бросаю Новое исключение («Тестовое исключение»); от события кнопки. Я делаю это, чтобы обеспечить обработку событий в моем приложении.

Ответы [ 3 ]

2 голосов
/ 04 декабря 2009

После некоторого удара головой о коде я обнаружил, что проблема была в том, что у моего решения SCSF была оболочка winforms и на этой оболочке были пользовательские элементы управления WPF.

Когда исключение было сгенерировано в этом пользовательском контроле WPF (в большинстве случаев), они не перехватываются Application.ThreadException coz Класс приложения для WPF отличается от класса для Winforms.

В приложении WPF необходимо обработать событие Application.DispacherUnhandledException.

Просто моя маленькая находка ...

2 голосов
/ 27 ноября 2009

Вы должны установить

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

См. эту страницу MSDN , например, код

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

0 голосов
/ 17 августа 2011

вы будете удивлены, просто обработав исключение Application.DispatcherUnhandledException.Я работал с SCSF, который имел пользовательские элементы управления WPF.Прочитайте этот пост.http://social.msdn.microsoft.com/forums/en-US/wpf/thread/c57cac13-f960-49a1-94b5-a3fd316ac4bc/ я бы тоже порекомендовал обработать исключение AppDomain.UnhandledException.

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