Heim >Backend-Entwicklung >C++ >Wie kann ich anmutig mit der Konsolenanwendungs ​​-Exit -Ereignisse in C#umgehen?

Wie kann ich anmutig mit der Konsolenanwendungs ​​-Exit -Ereignisse in C#umgehen?

Susan Sarandon
Susan SarandonOriginal
2025-01-28 10:07:12982Durchsuche

How Can I Gracefully Handle Console Application Exit Events in C#?

Erfassen Sie die Konsolenanwendung in C#, um den Vorfall zu verlassen

In Multi -Thread -Konsolenanwendungen kann die Beendigung nahtloser Programme eine Herausforderung sein. Einige Threads können bestimmte Bedingungen überwachen und das Programm zu einem bestimmten Zeitpunkt geschlossen beginnen. Um die korrekte Reinigungs- und Ressourcenveröffentlichung zu gewährleisten, suchen Entwickler normalerweise nach gebauten Ereignissen, die vor dem Programmverschluss ausgelöst werden.

Eine Methode zum Erfassen der Konsolenentnahme besteht darin, das Verfahren durch benutzerdefinierte Ereignisse zu verarbeiten. Mit der

-Funktion der Windows -API können Sie ein Ereignisverarbeitungsprogramm installieren, um verschiedene Exit -Ereignisse wie Herunterfahren, Herunterfahren oder Benutzerunterbrechungen abzufangen.

SetConsoleCtrlHandler Das folgende Codefragment zeigt diese Technologie:

Methode bietet eine Methode zur Filterung der Art des Ereignisses, der den Reinigungscode auslösen sollte. In diesem Beispiel verarbeiten wir den Konsolenverschluss, das Herunterfahren von Systemen und die Unterbrechung der Benutzerunterbrechung (STRG C). Beachten Sie, dass angibt, dass das Exit -Signal erfolgreich verarbeitet wurde, und das Programm kann das Programm elegant beenden.
<code class="language-csharp">[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add);

private delegate bool EventHandler(CtrlType sig);
static EventHandler _handler;

enum CtrlType
{
    CTRL_C_EVENT = 0,
    CTRL_BREAK_EVENT = 1,
    CTRL_CLOSE_EVENT = 2,
    CTRL_LOGOFF_EVENT = 5,
    CTRL_SHUTDOWN_EVENT = 6
}

private static bool Handler(CtrlType sig)
{
    //在此处添加您的清理代码
    switch (sig)
    {
        case CtrlType.CTRL_C_EVENT:
        case CtrlType.CTRL_LOGOFF_EVENT:
        case CtrlType.CTRL_SHUTDOWN_EVENT:
        case CtrlType.CTRL_CLOSE_EVENT:
            //执行清理操作
            Console.WriteLine("执行清理操作...");
            return true; //表示已处理事件
        default:
            return false; //表示未处理事件
    }
}

static void Main(string[] args)
{
    // 注册事件处理程序
    _handler += new EventHandler(Handler);
    SetConsoleCtrlHandler(_handler, true);
    //  ...您的应用程序主代码...
    Console.WriteLine("程序运行中...");
    Console.ReadKey(); // 保持控制台窗口打开,直到用户按下按键
}</code>

Es ist erwähnenswert, dass diese Lösung auf bestimmte Betriebssysteme auf Beschränkungen stoßen kann (insbesondere Windows 7). Wenn Sie auf Probleme stoßen, lesen Sie bitte die Methode, um den Vorfall von Online -Ressourcen und anderen Verarbeitungskonsolen zu verlassen. Um die Robustheit des Codes zu gewährleisten, wird empfohlen, der Methode Handler einen Fehlerverarbeitungsmechanismus hinzuzufügen, z. B. den Try-Catch-Block, um mögliche Anomalien zu erfassen. return true;

Das obige ist der detaillierte Inhalt vonWie kann ich anmutig mit der Konsolenanwendungs ​​-Exit -Ereignisse in C#umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:libv ist zweiNächster Artikel:libv ist zwei