J'ai une application de console en C #. Si quelque chose ne va pas, j'appelle En Java, je peux implémenter un crochet d'arrêt et l'enregistrer via environnement.exit () code> pour fermer mon application. J'ai besoin de se déconnecter du serveur et de fermer certains fichiers avant la fin de l'application. P>
runtime.getruntime (). addshutdownhook () code>. Comment puis-je obtenir la même chose en C #? P>
3 Réponses :
Je recommanderais d'envelopper l'appel à l'environnement.exit () dans votre propre méthode et en utilisant cela. Quelque chose comme ceci:
-1: Cela augmente considérablement le couplage lorsqu'il existe d'autres façons easy i> de faire fonctionner les choses sans ceci: EN.Wikipedia.org/wiki/Coupling_ (Computer_Science)
Comment cela augmenterait-il le couplage? La question pose la question de savoir comment aborder cela dans une demande de console, alors appeler environnement.exit serait une action valide. L'utilisation des événements serait plus facile, mais ils vont à l'encontre de l'AppDomain, et non du processus.
Si vous devez faire un nettoyage pour la ressource A quand il est fait être utilisé, gardez le nettoyage local pour A. Ne pas besoin de A, B, C et D pour y faire des hébergements spéciaux.
Un cas où cela peut ne pas faire la coupe est en cas d'exceptions non adaptées pouvant conduire à une sortie d'application, auquel cas myexit code> ne sera pas appelé. Toujours une réponse valide. Ne pense pas que cela mérite un bowvote
Vous pouvez joindre un gestionnaire d'événements à l'événement ProcessExit de l'application actuel:
using System; class Program { static void Main(string[] args) { AppDomain.CurrentDomain.ProcessExit += (s, e) => Console.WriteLine("Process exiting"); Environment.Exit(0); } }
Hook AppDomain Événements:
private static void Main(string[] args) { var domain = AppDomain.CurrentDomain; domain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); domain.ProcessExit += new EventHandler(domain_ProcessExit); domain.DomainUnload += new EventHandler(domain_DomainUnload); } static void MyHandler(object sender, UnhandledExceptionEventArgs args) { Exception e = (Exception)args.ExceptionObject; Console.WriteLine("MyHandler caught: " + e.Message); } static void domain_ProcessExit(object sender, EventArgs e) { } static void domain_DomainUnload(object sender, EventArgs e) { }