Разница между обработкой Application.ThreadException и переносом Application.Run в Try / Catch - PullRequest
3 голосов
/ 10 декабря 2011

Есть ли причина предпочитать один из этих методов реализации глобального обработчика исключений в приложении Windows Forms другому?

Первый метод

static void Main(string[] args) 
{
    try
    {
        System.Windows.Forms.Application.Run(mainform);
    }
    catch (Exception ex)
    {
        // Log error and display error message
    }
}

Второй метод

static void Main(string[] args) 
{
    System.Windows.Forms.Application.ThreadException += 
        new ThreadExceptionEventHandler(Application_ThreadException);
    System.Windows.Forms.Application.Run(mainform);
}

static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
    // Log error and display error message
}

Дает ли обработка события ThreadException что-то, чего нет в try / catch?

Ответы [ 2 ]

5 голосов
/ 10 декабря 2011

Мое понимание этого поведения заключается в том, что добавление обработчика ThreadException приведет к тому, что в противном случае этот обработчик будет перехватывать и обрабатывать необработанные исключения в формах, что позволит приложению продолжать работу.

В вашем дизайне try / catch первое необработанное исключение в форме приведет к остановке приложения. Вы поймаете исключение, но приложение завершится.

Обратите внимание, что также существует событие AppDomain.UnhandledException , которое будет вызываться в определенных случаях (необработанные исключения в потоках, отличных от потока форм главного окна и не перехватывающие ThreadException), все из плохие новости для вашего приложения.

2 голосов
/ 10 декабря 2011

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

A try/catch в main поймает исключение, но у вас останется Application.Run, и в этот момент все, что вы можете сделать, это выйти.

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