Comment fermer gracieusement un formulaire si une exception se produit sur ce formulaire en C #

Je suis dans une position où j’ai une application utilisateur volumineuse qui comporte pas mal de formulaires et je cherche un moyen de fermer un seul formulaire si une exception s’est produite en raison d’une logique bloquée dans ce formulaire.

En ce moment, je suis le principe suivant: “n’écrivez pas essayer / attraper partout pour attraper les erreurs trompeuses” et cela rend mon code plus propre, mais provoque le blocage de l’application entière lorsque j’ai une exception NullPointerException.

La meilleure solution serait un “gestionnaire d’erreur local” que chaque formulaire aurait pour collecter toutes les exceptions de ce niveau et tuer le formulaire là-bas au lieu de bouillonner et de tuer l’ensemble de l’application.

Quelqu’un a des idées?

Pouvez-vous dériver vos formulaires d’une classe de base commune, afin qu’ils puissent partager le même gestionnaire d’erreurs? Nous avons un formulaire de base qui enregistre l’exception, affiche une erreur, puis ferme le formulaire (facultatif en mode débogage). Chaque événement utilisateur (button_click par exemple) est encapsulé dans un try / catch qui appelle le gestionnaire d’erreurs de base.

De plus, au cas où vous ne le sauriez pas, il existe des gestionnaires d’exception globaux:

Événement Application.ThreadException

Événement AppDomain.UnhandledException

Evénement WindowsFormsApplicationBase.UnhandledException (VB)

mais provoque l’application entière de l’application lorsque j’ai un NullPointerException.

Ensuite, vous devez corriger la NullReferenceException(s) les NullReferenceException(s) , sans proposer de mécanisme compliqué pour capturer les exceptions au niveau global et effectuer un retour en arrière pour rechercher le formulaire qui l’a provoqué. Vous devez simplement (essayer de) concevoir votre code de sorte que les références nulles soient impossibles à produire ou, si elles se produisent, elles puissent être traitées avec élégance.

Si un scénario provoque un blocage, corrigez-le, ne l’ignorez pas. Comment pouvez-vous garantir que la fermeture du formulaire laissera votre programme dans un état cohérent, maintenant et à l’avenir? (Indice: vous ne pouvez pas)