winforms控件的全局异常处理
当处理ASP.NET 1.1项目时,我总是使用Global.asax来捕获所有错误。我正在寻找一种类似的方法来捕获Windows窗体用户控件中的所有异常,最终成为托管IE控件。什么是正确的方式去做这样的事情?winforms控件的全局异常处理
您需要处理Windows窗体的System.Windows.Forms.Application.ThreadException
事件。这篇文章真的帮了我:http://bytes.com/forum/thread236199.html。
如果您使用的是VB.NET,您可以使用非常方便的ApplicationEvents.vb。此文件免费提供一个VB.NET WinForms项目,并包含一个处理unhandled exceptions的方法。
为了得到这个漂亮的文件,它的“项目属性>>应用>>应用程序事件”
如果你不使用VB.NET,那么是的,它的操控性Application.ThreadException。
目前在我的WinForms应用程序我有处理程序Application.ThreadException
,如上所述,也AppDomain.CurrentDomain.UnhandledException
大多数例外通过ThreadException
处理到达,但在AppDomain一个也抓了几个在我的经验
来自MSDN的示例代码显示如何捕获这两种类型的未处理的异常:[msdn](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.threadexception.aspx) – 2011-07-14 00:43:26
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
在全球范围内处理异常...
Windows应用程序
System.Windows.Forms.Application.ThreadException事件
的主要方法一般使用。请参阅MSDN Thread Exception
Asp.Net
System.Web.HttpApplication.Error事件
在Global.asax文件中正常使用。请参阅MSDN Global.asax Global Handlers
控制台应用程序
System.AppDomain.UnhandledException事件
的主要方法一般使用。请参考MSDN UnhandledException
另请参见[我的问题](http://stackoverflow.com/questions/944/unhandled-exception-handler-in-net-11)的一些陷阱(链接到一对夫妇编码恐怖博客条目)。 – Ray 2008-08-05 22:17:11