2008-08-05 12 views
33

Lorsque je travaillais sur des projets ASP.NET 1.1, j'utilisais toujours Global.asax pour détecter toutes les erreurs. Je suis à la recherche d'un moyen similaire pour attraper toutes les exceptions dans un contrôle utilisateur Windows Forms, qui finit par être un contrôle IE hébergé. Quelle est la bonne façon de faire quelque chose comme ça?Gestion des exceptions globales pour le contrôle des winforms

+0

Jetez un coup d'œil à [ma question] (http://stackoverflow.com/questions/944/unhandled-exception-handler-in-net-11) pour connaître quelques pièges (liens vers un couple) des entrées de blog d'horreur de codage). – Ray

Répondre

6

Si vous utilisez VB.NET, vous pouvez accéder au très pratique ApplicationEvents.vb. Ce fichier vient gratuitement avec un projet VB.NET WinForms et contient une méthode pour gérer unhandled exceptions.

Pour accéder à ce fichier astucieux, il est « Propriétés du projet >> L'application >> Evénements d'application »

Si vous ne l'utilisez VB.NET, alors oui, il est la manipulation Application.ThreadException.

11

Actuellement dans mon application WinForms je gestionnaires pour Application.ThreadException, comme ci-dessus, mais aussi AppDomain.CurrentDomain.UnhandledException

La plupart des exceptions arrivent via le gestionnaire ThreadException, mais celui AppDomain a également pris un peu mon expérience

+3

Exemple de code de MSDN montrant comment intercepter les deux types d'exceptions non gérées: [msdn] (http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx) –

2

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

Pour gérer les exceptions ... à l'échelle mondiale

Application Windows

événement de System.Windows.Forms.Application.ThreadException

Généralement utilisé dans la méthode principale. Reportez-vous MSDN Thread Exception

Asp.Net

événement System.Web.HttpApplication.Error

Normalement utilisé dans le fichier Global.asax. Reportez-vous MSDN Global.asax Global Handlers

Application console

événement System.AppDomain.UnhandledException

Généralement utilisé dans la méthode principale. Reportez-vous à MSDN UnhandledException