Winforms控件的全局异常处理

在处理ASP.NET 1.1项目时,我总是使用Global.asax来捕获所有错误。我正在寻找一种类似的方法来捕获Windows窗体用户控件中的所有异常,最终成为托管IE控件。什么是正确的方式去做这样的事情?

0
额外 编辑
意见: 3
另请参阅我的问题中的一些陷阱(链接到a几个编码恐怖博客条目)。
额外 作者 Ray,

5 答案

Currently in my winforms app I have handlers for Application.ThreadException, as above, but also AppDomain.CurrentDomain.UnhandledException

大多数异常通过 ThreadException 处理程序到达,但AppDomain在我的经验中也捕获了一些异常

0
额外
来自MSDN的示例代码显示了如何捕获这两种类型的未处理的异常: msdn
额外 作者 Jan Hettich,

如果你使用VB.NET,你可以使用非常方便的ApplicationEvents.vb。这个文件免费提供一个VB.NET WinForms项目,并包含一个处理未处理的例外

To get to this nifty file, it's "Project Properties >> Application >> Application Events"

如果你不使用VB.NET,那么是的,它处理 Application.ThreadException

0
额外

Code from 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 
0
额外

处理全局异常...

Windows应用程序

System.Windows.Forms.Application.ThreadException事件

一般在主要方法中使用。请参阅 MSDN线程异常

Asp.Net </强>

System.Web.HttpApplication.Error事件

通常用于Global.asax文件中。请参阅 MSDN Global.asax全局处理程序

控制台应用程序

System.AppDomain.UnhandledException事件

Generally used in Main Method. Refer MSDN UnhandledException

0
额外

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

0
额外