2008-08-05 10 views
33

При работе над проектами ASP.NET 1.1 я всегда использовал Global.asax для обнаружения всех ошибок. Я ищу аналогичный способ уловить все исключения в пользовательском элементе Windows Forms, который в конечном итоге является размещенным элементом управления IE. Каков правильный способ сделать что-то подобное?Глобальная обработка исключений для управления winforms

+0

Также ознакомьтесь с [моим вопросом] (http://stackoverflow.com/questions/944/unhandled-exception-handler-in-net-11) для некоторых подводных камней (ссылки на пару кодовых записей блога ужасов). – Ray 2008-08-05 22:17:11

ответ

24

Вам необходимо обработать событие System.Windows.Forms.Application.ThreadException для Windows Forms. Эта статья действительно помогла мне: http://bytes.com/forum/thread236199.html.

6

Если вы используете VB.NET, вы можете использовать очень удобный ApplicationEvents.vb. Этот файл поставляется бесплатно с проектом VB.NET WinForms и содержит метод обработки unhandled exceptions.

Чтобы добраться до этого изящного файла, это «Свойства проекта >> Применение >> События Применение»

Если вы не используете VB.NET, то да, это обработка Application.ThreadException.

11

В настоящее время в моем WinForms приложение, которое я обработчики Application.ThreadException, как указано выше, но и AppDomain.CurrentDomain.UnhandledException

Большинство исключений прибывают через ThreadException обработчик, но AppDomain один также пойманы несколько в моем опыте

+3

Пример кода из MSDN, показывающий, как поймать оба типа необработанных исключений: [msdn] (http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx) – 2011-07-14 00:43:26

2

код из MSDN: http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

Sub Main() 
    Dim currentDomain As AppDomain = AppDomain.CurrentDomain 
    AddHandler currentDomain.UnhandledException, AddressOf MyHandler 

    Try 
    Throw New Exception("1") 
    Catch e As Exception 
    Console.WriteLine("Catch clause caught : " + e.Message) 
    Console.WriteLine() 
    End Try 

    Throw New Exception("2") 
End Sub 

Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs) 
    Dim e As Exception = DirectCast(args.ExceptionObject, Exception) 
    Console.WriteLine("MyHandler caught : " + e.Message) 
    Console.WriteLine("Runtime terminating: {0}", args.IsTerminating) 
End Sub 
3

для обработки исключений Глобально ...

приложений Windows

System.Windows.Forms.Application.ThreadException событие

Обычно используется в методе Main. См MSDN Thread Exception

Asp.Net

System.Web.HttpApplication.Error событие

Обычно используется в Global.asax файле. См MSDN Global.asax Global Handlers

Console Application

System.AppDomain.UnhandledException событие

Обычно используется в методе Main. См. MSDN UnhandledException