【问题标题】:Global Exception Handling for winforms controlwinforms控制的全局异常处理
【发布时间】:2010-09-05 09:22:15
【问题描述】:

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

【问题讨论】:

  • 还可以查看my question 了解其中的一些陷阱(链接到几个编码恐怖博客条目)。

标签: winforms error-handling user-controls


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 来自 MSDN 的示例代码展示了如何捕获这两种类型的未处理异常:msdn
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      全局处理异常...

      Windows 应用程序

      System.Windows.Forms.Application.ThreadException 事件

      一般用在 Main 方法中。参考MSDN Thread Exception

      Asp.Net

      System.Web.HttpApplication.Error 事件

      通常用于 Global.asax 文件。参考MSDN Global.asax Global Handlers

      控制台应用程序

      System.AppDomain.UnhandledException 事件

      一般用在 Main 方法中。参考MSDN UnhandledException

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-21
          • 1970-01-01
          • 2020-01-18
          • 2016-11-03
          • 1970-01-01
          • 2015-12-21
          • 2011-09-29
          相关资源
          最近更新 更多