34

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

4

5 回答 5

24

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

于 2008-08-05T20:11:45.340 回答
11

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

大多数异常是通过ThreadException处理程序到达的,但根据我的经验,AppDomain 也遇到了一些异常

于 2008-08-05T20:42:31.020 回答
6

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

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

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

于 2008-08-05T20:16:26.127 回答
3

全局处理异常...

Windows 应用程序

System.Windows.Forms.Application.ThreadException 事件

一般用于主方法。参考MSDN 线程异常

网络

System.Web.HttpApplication.Error 事件

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

控制台应用程序

System.AppDomain.UnhandledException 事件

一般用于主方法。参考MSDN UnhandledException

于 2015-05-19T11:36:04.120 回答
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 
于 2013-09-27T21:55:24.050 回答