2008-08-05 104 views
33

當處理ASP.NET 1.1項目時,我總是使用Global.asax來捕獲所有錯誤。我正在尋找一種類似的方法來捕獲Windows窗體用戶控件中的所有異常,最終成爲託管IE控件。什麼是正確的方式去做這樣的事情?winforms控件的全局異常處理

+0

另請參見[我的問題](http://stackoverflow.com/questions/944/unhandled-exception-handler-in-net-11)的一些陷阱(鏈接到一對夫婦編碼恐怖博客條目)。 – Ray 2008-08-05 22:17:11

回答

6

如果您使用的是VB.NET,您可以使用非常方便的ApplicationEvents.vb。此文件免費提供一個VB.NET WinForms項目,幷包含一個處理unhandled exceptions的方法。

爲了得到這個漂亮的文件,它的「項目屬性>>應用>>應用程序事件」

如果你不使用VB.NET,那麼是的,它的操控性Application.ThreadException

11

目前在我的WinForms應用程序我有處理程序Application.ThreadException,如上所述,也AppDomain.CurrentDomain.UnhandledException

大多數例外通過ThreadException處理到達,但在AppDomain一個也抓了幾個在我的經驗

+3

來自MSDN的示例代碼顯示如何捕獲這兩種類型的未處理的異常:[msdn](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.threadexception.aspx) – 2011-07-14 00:43:26

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