Nous sommes d'avoir une application WPF zones où il peut lancer des exceptions à l'exécution. J'aimerais à l'échelle mondiale attraper une exception non gérée et journal, mais en tout cas de poursuivre l'exécution du programme comme si de rien n'était (un peu comme VB de l' On Error Resume Next
).
Est-ce possible en C#? Et si oui, où exactement, ai-je besoin de mettre le code de gestion des exceptions?
Actuellement je ne vois pas un seul point où je pouvais emballer un try
/catch
environ et qui permettrait d'intercepter toutes les exceptions qui pourraient se produire. Et même alors je l'ai laissé tout ce qui a été exécuté en raison de la capture. Ou suis-je en pensant à mal les directions ici?
ETA: Parce que beaucoup de gens au-dessous de l'a signalé: L'application n'est pas pour le contrôle des centrales nucléaires. Si il plante, il n'est pas beaucoup d'une grosse affaire, mais au hasard des exceptions qui sont pour la plupart liées à l'INTERFACE utilisateur sont une nuisance dans le contexte où il sera utilisé. Il y avait (et probablement encore) un peu de ceux-ci et depuis il utilise une architecture de plugin et peut être prolongé par d'autres (également les étudiants dans ce cas; donc pas de développeurs expérimentés qui sont capables d'écrire complètement exempt d'erreurs de code).
Comme pour les exceptions coincés: je ne les enregistre dans un fichier journal, y compris la trace de la pile complète. Qui a été le point de l'ensemble de l'exercice. Juste pour contrer ces gens qui ont été en prenant mon analogie à VB de OERN trop littéralement.
Je sais que l'aveuglette en ignorant certaines classes d'erreurs est dangereux et peut corrompre mon instance de l'application. Comme dit précédemment, ce programme n'est pas critique pour n'importe qui. Personne dans leur bon esprit pari de la survie de la civilisation humaine. C'est tout simplement un petit outil qui permet de tester certaines des approches de conception wrt. génie logiciel.
Pour l'utilisation immédiate de l'application il n'y a pas beaucoup de choses qui peuvent se produire sur une exception:
- Pas de gestion des exceptions – dialogue d'erreur et la fermeture de l'application. L'expérience doit être répétée, bien que probablement avec un autre sujet. Aucune erreur n'a été enregistré, ce qui est regrettable.
- Générique de gestion des exceptions – bénigne erreur interceptée, pas de dégâts. Ce devrait être le cas le plus courant jugé à partir de toutes les erreurs, nous avons pu assister au cours du développement. Le fait d'ignorer ce genre d'erreurs devraient pas avoir de conséquences immédiates; les structures de données de base sont bien testé assez facilement survivre à ça.
- Générique de gestion des exceptions – grave erreur interceptée, éventuellement bloquer à un moment plus tard. Cela peut se produire rarement. Nous n'avons jamais vu ça jusqu'à présent. L'erreur est quand même enregistré et un accident est peut-être inévitable. Donc, c'est conceptuellement similaire à la première affaire. Sauf que nous avons une trace de la pile. Et dans la majorité des cas, l'utilisateur ne remarquerez même pas.
Comme pour l'expérience des données générées par le programme: Une grave erreur, au pire, juste cause, aucune donnée ne sera enregistrée. De subtils changements qui modifient le résultat de cette expérience un tant soit peu sont assez improbable. Et même dans ce cas, si les résultats semblent douteux, l'erreur a été enregistrée; on peut encore jeter ce point de données si c'est un total de valeurs aberrantes.
Pour résumer: Oui, je me considère toujours, au moins partiellement, sain d'esprit et je ne considère pas une exception mondial d'une routine de gestion qui quitte le programme en cours d'exécution à être nécessairement totalement mal. Comme l'a dit deux fois auparavant, une telle décision peut être valide, en fonction de l'application. Dans ce cas, il a été jugé valide décision et de ne pas totale et absolue de la connerie. Pour toute autre demande que la décision soit différent. Mais merci de ne pas m'accuser ou de l'autre des gens qui ont travaillé sur ce projet pour potentiellement faire sauter le monde, juste parce que nous sommes en ignorant les erreurs.
Note de côté: Il y a exactement un utilisateur pour cette application. Ce n'est pas quelque chose comme Windows ou Office qui est utilisé par des millions de personnes, où le coût d'avoir des exceptions bulle à l'utilisateur serait très différente, en premier lieu, déjà.