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
Répondre
Vous devez gérer l'événement System.Windows.Forms.Application.ThreadException
pour Windows Forms. Cet article m'a vraiment aidé: http://bytes.com/forum/thread236199.html.
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.
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
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) –
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
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
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