在处理ASP.NET 1.1项目时,我总是使用Global.asax来捕获所有错误。我正在寻找一种类似的方法来捕获Windows窗体用户控件中的所有异常,最终成为托管的IE控件。做这样的事情的正确方法是什么?
答案 0 :(得分:24)
您需要处理Windows窗体的System.Windows.Forms.Application.ThreadException
事件。这篇文章真的帮助了我:http://bytes.com/forum/thread236199.html。
答案 1 :(得分:11)
目前在我的winforms应用中,我有Application.ThreadException
的处理程序,如上所述,还有AppDomain.CurrentDomain.UnhandledException
大多数例外都是通过ThreadException
处理程序到达的,但是根据我的经验,AppDomain也有一些例外
答案 2 :(得分:6)
如果您使用的是VB.NET,则可以使用非常方便的ApplicationEvents.vb。这个文件是免费提供的VB.NET WinForms项目,包含一个处理unhandled exceptions的方法。
要获得这个漂亮的文件,它是“Project Properties>> Application>> Application Events”
如果您没有使用VB.NET,那么,它正在处理Application.ThreadException。
答案 3 :(得分:3)
全球处理例外......
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
答案 4 :(得分: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