winforms控件的全局异常处理

时间:2008-08-05 20:05:22

标签: winforms error-handling user-controls

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

5 个答案:

答案 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)

来自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