winforms控件的全局异常处理

Translate

在ASP.NET 1.1项目上工作时,我总是使用Global.asax来捕获所有错误。我正在寻找一种类似的方法来捕获Windows Forms用户控件中的所有异常,而该控件最终是托管的IE控件。做这样的事情的正确方法是什么?

This question and all comments follow the "Attribution Required."

所有的回答

Translate

您需要处理System.Windows.Forms.Application.ThreadExceptionWindows窗体的事件。这篇文章确实对我有帮助:http://bytes.com/forum/thread236199.html.

来源
Translate

目前在我的winforms应用程序中,我有处理程序Application.ThreadException,如上所述AppDomain.CurrentDomain.UnhandledException

多数例外情况是通过ThreadException处理程序,但我的经验也吸引了AppDomain

来源
Translate

如果您使用的是VB.NET,则可以使用非常方便的ApplicationEvents.vb。此文件随VB.NET WinForms项目免费提供,并包含一种处理方法未处理的异常.

要获得这个漂亮的文件,它是“项目属性>>应用程序>>应用程序事件”

如果您不使用VB.NET,那么可以Application.ThreadException.

来源
Translate

全局处理异常...

Windows应用程序

System.Windows.Forms.Application.ThreadException事件

通常在主要方法中使用。参考MSDN线程异常

天网

System.Web.HttpApplication.Error事件

通常在Global.asax文件中使用。参考MSDN Global.asax全局处理程序

控制台应用

System.AppDomain.UnhandledException事件

通常用于主要方法。参考MSDN UnhandledException

来源
Translate

来自MSDN的代码:http://msdn.microsoft.com/zh-CN/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 
来源