J'utilise le Application. ThreadException événement pour gérer et connecter des exceptions inattendues dans mon application Winforms.
Maintenant, quelque part dans ma demande, j'ai le code suivant (ou plutôt quelque chose d'équivalent, mais ce code factice suffit à reproduire mon problème ): P>
test ... here I click button1 test2
3 Réponses :
exception n ° 1: Alors, n'essayez pas d'appeler de le constructeur. Faites-le dans invoquer code> ou
begininvoke code> ne peut pas être appelé sur une commande jusqu'à ce que la poignée de la fenêtre ait été créée.
surcharger () code>: p>
Votre suggestion a du sens, mais cela ne change pas le comportement étrange.
@Brann, vous êtes correct. Le comportement étrange persiste. Cependant, je l'ai corrigé en ne faisant pas attrape (exception ex) code> dans le bouton, cliquez sur le gestionnaire, mais plutôt juste
attraper code>. Très intéressant. Une exception pas décendrière d'exception étant jetée.
Vous devez appeler p>
Application.setUnhandleXceptionMode (AnnanledexceptionMode.CatchException); P> blockQuote>
premier dans votre méthode principale (). P>
Il y a un bogue dans votre code qui rend difficile de déboguer ce qui se passe: vous démarrez le fil avant la création de la poignée du formulaire. Cela fera échouer à Begininvoke. Correction:
try { this.InvokeMarshaledCallback(tme); } catch (Exception exception) { tme.exception = exception.GetBaseException(); } ... if ((!NativeWindow.WndProcShouldBeDebuggable && (tme.exception != null)) && !tme.synchronous) { Application.OnThreadException(tme.exception); }
L'appel code> getbaseException code> est conçu pour déballer cibleInvocationException code> S de
invoquer code>.
Ce n'est pas ça. Control.begininvoke () n'est pas du tout de même que le délégué.begininvoke (). Cela ne ferma pas l'exception à l'appelant, pour une.