2009-09-10 6 views
1

Certaines exceptions lancées comme ceci:exception Jeté ne marche pas l'application d'arrêt

throw new Exception(errMsg); 

... arrête reallly ma fais application!

Mon attente est quand je jette un ex. - L'application doit s'arrêter immédiatement.
Mais j'ai remarqué que mon application jetait un ex. après l'autre (en particulier lors de la liaison) au lieu de terminer en même temps

EDIT_1:
Je n'ai pas bloc try-catch quand il peut être intercepter

EDIT_2:

Comme mentionné - ce se produit principalement lors de la liaison.

Par exemple, j'ai le getter de contrôle de l'objet en vérifiant les privilèges de l'utilisateur (méthode GetValue) - si elle ne déclenche pas d'exception.
Je peux voir dans le débogueur qu'il exécute throw new Exception (...) instruction mais les applications ne s'arrêtent pas. J'ai également remarqué des exceptions sont levées autant de fois que de nombreux articles sont dans la collection liée ...

Une idée de comment forcer arrêter la liaison et augmenter réelle exception ??

Exemple de code pour illustrer ce que je suis talkin'

public string Name { 
    get { return GetValue(name, "Name"); } 
} 

Répondre

1

Si je vous comprends bien: votre application continuera de fonctionner si l'exception jetée est pris dans le cadre d'un bloc try/catch, ou si vous avez configuré un gestionnaire catch-all d'exception au niveau de l'application.

2

Les exceptions n'arrêtent l'application que si elles restent intactes jusqu'au fond de la pile en cours. La liaison WPF est très résiliente à la plupart des exceptions levées; à la place, il enregistrera les échecs dans la fenêtre de sortie et continuera. Que ce soit une bonne décision de conception est un sujet de débat ...

6

Les exceptions non interceptées entraîneront la fermeture de votre application. Son par conception (au moins après 2.0 a été libéré, 1.1 avait un comportement différent, iirc). Ils appellent cela "défaillant rapidement". L'idée est que si une exception à laquelle vous ne vous attendiez pas (et donc attraper) est levée, votre application est dans un état instable. À ce stade, il vaut mieux qu'il s'écrase que de continuer à boitiller. Les liaisons se comportent différemment, car toutes les opérations de liaison (dans WPF) sont conçues pour intercepter toutes les exceptions plutôt que de supprimer votre application. Pourquoi ils ont pris cette décision est quelque chose que l'équipe WPF aurait à vous dire.

Questions connexes