WinForms - почему не обнаруживаются мои исключения? - PullRequest
0 голосов
/ 24 октября 2009

На моем многопоточном сервере я использую следующий код (до запуска самой формы или курса)

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomainUnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(ApplicationThreadException);

Вызываемые методы записывают исключения в список, чтобы я мог легко это исправить. Но сегодня я пришел и увидел, что VS бросил NullReference exception, и я понятия не имею, почему его не поймали?

Я могу воспроизвести его по телефону:

stream = null;
stream.Flush();

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

Я уверен, что видел "Object reference not set to an instance of object" в моем списке "исключений", и программа продолжалась. Почему это конкретное исключение не поймано?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2009

Мы используем следующий код и находим, что он хорошо работает: -

namespace YourNamespace
{
    static class Program
    {

        [STAThread]
        static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            HandleException(e.Exception);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            HandleException((Exception)e.ExceptionObject);
        }

        static void HandleException(Exception e)
        {
            //Handle exception
        }

    }
}

Спасибо,

Phil http://exceptioneer.com

0 голосов
/ 24 октября 2009

Чтобы ответить на ваш вопрос, нам нужна дополнительная информация об ошибке, которая была выдана. Это происходит из вашего кода? Давайте посмотрим на трассировку стека.

Кроме того, если вы вызовете Application.Run (...) до настройки ThreadException, он не будет перехватывать никаких исключений.

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