При работе над проектами ASP.NET 1.1 я всегда использовал Global.asax для обнаружения всех ошибок. Я ищу аналогичный способ уловить все исключения в пользовательском элементе Windows Forms, который в конечном итоге является размещенным элементом управления IE. Каков правильный способ сделать что-то подобное?
Глобальная обработка исключений для управления winforms
Ответ 1
Вам нужно обработать событие System.Windows.Forms.Application.ThreadException
для Windows Forms. Эта статья действительно помогла мне: http://bytes.com/forum/thread236199.html.
Ответ 2
В моем приложении winforms у меня есть обработчики для Application.ThreadException
, как указано выше, но также AppDomain.CurrentDomain.UnhandledException
Большинство исключений поступает с помощью обработчика ThreadException
, но AppDomain также обнаружил несколько в моем опыте
Ответ 3
Если вы используете VB.NET, вы можете использовать очень удобный ApplicationEvents.vb. Этот файл поставляется бесплатно с проектом VB.NET WinForms и содержит метод обработки необработанных исключений.
Чтобы получить этот отличный файл, он "Свойства проекта → Приложение → События приложения"
Если вы не используете VB.NET, тогда да, он обрабатывает Application.ThreadException.
Ответ 4
Обработка исключений глобально...
Приложение Windows
Событие System.Windows.Forms.Application.ThreadException
Обычно используется в основном методе. См. Исключение потоков MSDN
Asp.Net
Событие System.Web.HttpApplication.Error
Обычно используется в файле Global.asax. Обратитесь Глобальные обработчики MSDN Global.asax
Консольное приложение
Событие System.AppDomain.UnhandledException
Обычно используется в основном методе. См. MSDN UnhandledException
Ответ 5
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