Глобальная обработка исключений для управления winforms

StackOverflow https://stackoverflow.com/questions/2770

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Чтобы перейти к этому замечательному файлу, перейдите в раздел "Свойства проекта>> Приложение>> События приложения".

Если вы не используете VB.NET, тогда да, это обработка Приложение.Исключение ThreadException.

Обрабатывать Исключения глобально...

Приложение для Windows

Система.Windows.Формы.Приложение.Событие ThreadException

Обычно используется в Основном Методе.Ссылаться Исключение потока MSDN

Asp.Net

System.Web.HttpApplication.Событие ошибки

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

Консольное приложение

Система.Домен приложения.Событие необработанного исключения

Обычно используется в Основном Методе.Ссылаться Необработанное исключение MSDN

Код из 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 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top