Je comprends qu’il existe plusieurs façons de quitter une application, telles que Application.Exit (), Application.ExitThread (), Environment.Exit (), etc.
J'ai une bibliothèque externe "commons", et j'essaie de créer une méthode FailIf générique qui enregistre l'échec dans les journaux, fait ceci et cela et cela et cela, puis quitte l'application ... voici une version courte de il.
public static void FailIf(Boolean fail, String message, Int32 exitCode = 1)
{
if (String.IsNullOrEmpty(message))
throw new ArgumentNullException("message");
if (fail)
{
//Do whatever I need to do
//Currently Environment.Exit(exitCode)
Environment.Exit(exitCode);
}
}
J'ai lu qu'utiliser Environment.Exit n'est pas la meilleure façon de gérer les applications WinForm. De même, lorsque vous travaillez avec les applications WPF et Silverlight, il existe différentes manières de quitter ... Ma question est vraiment:
Qu'est-ce que je mets pour quitter en douceur afin de couvrir tous les types d'applications?
Lisez ceci sur la différence entre l’utilisation d’environnement et d’application:
Application.Exit Vs Environment.Exit
Vous trouverez un exemple de ce que vous voulez faire au bas de cette page:
if (System.Windows.Forms.Application.MessageLoop)
{
// Use this since we are a WinForms app
System.Windows.Forms.Application.Exit();
}
else
{
// Use this since we are a console app
System.Environment.Exit(1);
}
S'il s'agit simplement d'un avortement, utilisez Environment.Exit()
. S'il s'agit de quelque chose de très critique (qui ne peut gérer aucun type de nettoyage), utilisez Environment.FailFast()
.
Je recommanderais d'utiliser la gestion des exceptions de base. Ainsi, au lieu de System.Environment.Exit (1), lançons une nouvelle ApplicationException (message) qui met en exception l'exception avec la méthode principale.
try{
Application.Run(new MyForm());
}
catch(ApplicationException){
// do custom cleanup/reporting
}
Assurez-vous simplement de lancer l’exception du fil principal, sinon invoquer dessus avant de lancer ofcourse