2009-06-24 8 views
10

Salut
Existe-t-il un moyen de gérer toutes les exceptions et les pannes d'erreurs dans l'application WPF? Je connais DispatcherUnhandledException, mais il ne gère que les exceptions dans le thread de l'interface utilisateur, n'est-ce pas? Existe-t-il un moyen d'attraper et de consigner toutes les exceptions dans d'autres threads? et des erreurs de liaison aussi? Comment implémentez-vous ce type d'exigence dans votre système enterprice?Quelle est la meilleure pratique pour gérer toutes les exceptions dans l'application WPF?

Répondre

3

Gardez à l'esprit que Microsoft ne recommande pas attraper toutes les exceptions, au lieu qu'ils recommandent de prendre seulement des exceptions que vous connaissez (ou attendre à se produire dans un endroit). Encore plus si vous voulez obtenir le logo "Certifié pour Microsoft [Windows | Vista]", vous ne devez pas attraper des exceptions inconnues, et ces exceptions doivent être passées au Wer.

+4

Je suis d'accord, mais si vous attrapez toutes les exceptions faites-le seulement pour l'enregistrer, ainsi vous pouvez trouver les erreurs communes et les corriger. An puis relancez l'exception. – khebbie

+6

Je crois que le conseil de Microsoft que vous mentionnez n'est PAS de faire toutes les exceptions, c'est-à-dire attraper l'exception, à partir du bloc try. Cependant, le PO demande une solution pour gérer les exceptions non interceptées afin que vous puissiez gérer la situation en informant l'utilisateur du plantage et en envoyant à votre équipe de développement/assurance qualité un rapport de plantage par e-mail. – Dennis

+1

Non, le conseil de Microsoft consiste exactement à intercepter toutes les exceptions non gérées.L'idée principale est de collecter toutes les informations et d'envoyer un rapport à MS, de sorte que MS aura toutes les statistiques sur les applications problématiques, et le développeur pourra alors prendre ces rapports de MS par Winqual. Mais bien sûr, faire un peu de journalisation à propos d'une exception inconnue, puis relancer comme khebbie mentionné est également autorisé. – arbiter

10
AppDomain.CurrentDomain.UnhandledException 

Interceptera les exceptions non gérées pour l'unité d'exécution en cours. C'est ainsi que nous le traitons dans notre application. BindingErrors sont toujours traitées et consignées dans la fenêtre de sortie. Avant une version, nous vérifions les erreurs de liaison dans la fenêtre de sortie et nous en réparons autant que possible.

Cependant, je suis d'avis que vous ne voudriez pas traiter les erreurs de liaison comme non traitées car elles sont généralement récupérables et devraient être corrigées le mieux possible avant chaque publication. Vous pouvez modifier Debug> Exeptions dans Visual Studio pour le faire lancer BindingFailure pour obtenir des informations plus spécifiques.

HTH,

Dennis

+0

Où est le meilleur endroit pour définir le gestionnaire d'événements tels que peuvent être détectés même les erreurs plus tôt? –

+0

Vous pouvez enregistrer l'événement dans le point d'entrée de l'application. Voir http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx pour les détails car il y a quelques choses que vous devez comprendre. – Dennis

4

Oui, il y a 3 places:

  1. place Application.Run() dans try ... catch
  2. DispatcherUnhandledException
  3. AppDomain.CurrentDomain.UnhandledException

Dans les deux cas, vous devez afficher une s'il vous plaît-forgive- me message et suggère d'envoyer un rapport d'erreur.

Le service sur votre serveur doit répondre «merci de nous avoir envoyé un rapport d'erreur» ou «le problème est déjà résolu dans la prochaine version. s'il vous plaît mettre à jour »

+3

Je ne pensais pas que 'Application.Run()' existait dans les applications WPF. – Pat

+0

Bon point pour lister tous les lieux. Mais assurez-vous que tous sont corrects. –

Questions connexes