Frage

Ich habe eine Konsolenanwendung in C #. Wenn etwas schief geht, nenne ich Environment.Exit() meine Anwendung zu schließen. Ich muß von dem Server trennen und einige Dateien schließen, bevor die Anwendung beendet.

In Java kann ich einen Shutdown-Hook implementieren und über Runtime.getRuntime().addShutdownHook() registrieren. Wie kann ich das gleiche in C # erreichen?

War es hilfreich?

Lösung

Sie können einen Ereignishandler die aktuelle Anwendungsdomäne des ProcessExit Ereignis zuordnen:

using System;
class Program
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.ProcessExit += (s, e) => Console.WriteLine("Process exiting");
        Environment.Exit(0);
    }
}

Andere Tipps

AppDomain Ereignisse:

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

Ich würde empfehlen, den Anruf zu Environment.Exit () in Ihrer eigenen Methode Einwickeln und die Verwendung dieser im gesamten Gebäude. So etwas wie folgt aus:

internal static void MyExit(int exitCode){
    // disconnect from network streams
    // ensure file connections are disposed
    // etc.
    Environment.Exit(exitCode);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top