9
votes

Application très étrange.threadException Comportement

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


0 commentaires

3 Réponses :


1
votes

exception n ° 1: invoquer ou begininvoke ne peut pas être appelé sur une commande jusqu'à ce que la poignée de la fenêtre ait été créée.

Alors, n'essayez pas d'appeler de le constructeur. Faites-le dans surcharger () : xxx


2 commentaires

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) dans le bouton, cliquez sur le gestionnaire, mais plutôt juste attraper . Très intéressant. Une exception pas décendrière d'exception étant jetée.



0
votes

Vous devez appeler

Application.setUnhandleXceptionMode (AnnanledexceptionMode.CatchException);

premier dans votre méthode principale ().


0 commentaires

7
votes

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);
       }


2 commentaires

L'appel getbaseException est conçu pour déballer cibleInvocationException S de invoquer .


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.