wake-up-neo.com

Allgemeine Methode zum Beenden einer .NET-Anwendung

Ich verstehe, dass es eine Reihe von Möglichkeiten gibt, eine Anwendung zu beenden, z. B. Application.Exit (), Application.ExitThread (), Environment.Exit () usw.

Ich habe eine externe "commons" -Bibliothek, und ich versuche, eine generische FailIf-Methode zu erstellen, die den Fehler in den Protokollen protokolliert, dies und das und das und das und dann die Anwendung beendet ... Hier ist eine kurze Version von es.

    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);
        }
    }

Ich habe gelesen, dass die Verwendung von Environment.Exit nicht der beste Weg ist, Dinge zu handhaben, wenn es um WinForm-Apps geht, und auch beim Arbeiten mit WPF-Apps und Silverlight gibt es verschiedene Wege, um das Programm zu beenden. Meine Frage ist wirklich:

Was muss ich ausreichen, um alle Anwendungstypen abzudecken?

22
michael

Lesen Sie dies über den Unterschied zwischen der Verwendung von Umgebung und Anwendung:

Application.Exit Vs Environment.Exit

Unten auf dieser Seite finden Sie ein Beispiel dafür, was Sie tun möchten:

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);
}
27
Yochai Timmer

Wenn es sich nur um einen Abbruch handelt, verwenden Sie Environment.Exit(). Wenn es etwas sehr kritisches ist (das keine Bereinigung durchführen kann), verwenden Sie Environment.FailFast().

2
Mehrdad

Ich würde die Verwendung der grundlegenden Ausnahmebehandlung empfehlen, also anstelle von System.Environment.Exit (1) eine neue ApplicationException (Nachricht) auslösen, die die Ausnahme für die Hauptmethode ausbläst, in Ihrem Fall etwa Folgendes:

try{
Application.Run(new MyForm());
}
catch(ApplicationException){
// do custom cleanup/reporting
}

Stellen Sie nur sicher, dass Sie die Ausnahme aus dem Haupt-Thread werfen, ansonsten rufen Sie sie auf, bevor Sie ofcourse werfen

0
Polity