J'étudie un peu comment les exceptions non gérées sont gérées dans .Net et j'obtiens des résultats inattendus que je voudrais partager avec vous pour voir ce que vous en pensez.Capture d'exceptions non gérées dans .Net 2.0. Mauvais événement appelé
Le premier est assez simple à voir. J'ai écrit ce code pour faire le test, juste un bouton qui renvoie une exception sur le même thread qui a créé le formulaire:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Throw New Exception()
End Sub
Private Sub UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
MsgBox(String.Format("Exception: {0}. Ending: {1}. AppDomain: {2}", CType(e.ExceptionObject, Exception).Message, e.IsTerminating.ToString(), AppDomain.CurrentDomain.FriendlyName))
End Sub
Private Sub UnhandledThreadException(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)
MsgBox(String.Format("Exception: {0}. AppDomain: {1}", e.Exception.Message(), AppDomain.CurrentDomain.FriendlyName))
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException
AddHandler Application.ThreadException, AddressOf UnhandledThreadException
End Sub
End Class
Lorsque j'exécute le code dans Visual Studio le UnhandledException est appelé comme prévu, mais quand je exécuter l'application à partir de Windows, l'exception UndhanledThreadException est appelée à la place. ¿? ¿? ¿¿? ¿?
Quelqu'un a une idée de ce qui peut se passer ici?
Merci d'avance. EDIT: Après avoir lu Application.ThreadException documentation ressemble à Application.ThreadException est soulevée lorsque des exceptions se produisent à l'intérieur de "Windows Forms threads" (quels qu'ils soient, à mon humble avis, il n'y a qu'un seul thread Windows Form dans chaque application). Ainsi, Application.ThreadException est liée aux exceptions générées par le thread qui a créé le formulaire de votre application et les autres exceptions sont gérées par AppDomain.CurrentDomain.UnhandledException.
Pas de problème pour déboguer le code de gestion, c'est juste que je n'ai trouvé aucune documentation sur ce fait. Quoi qu'il en soit, juste essayé le SetUnHandledException et le gestionnaire n'est pas appelé quand même car l'exécution s'arrête au point d'origine Exception et ne peut pas aller plus loin. –