Heim > Backend-Entwicklung > C++ > Wie kann ich Strg C (SIGINT) in einer C#-Konsolenanwendung ordnungsgemäß handhaben?

Wie kann ich Strg C (SIGINT) in einer C#-Konsolenanwendung ordnungsgemäß handhaben?

Mary-Kate Olsen
Freigeben: 2024-12-27 05:35:09
Original
299 Leute haben es durchsucht

How Can I Gracefully Handle Ctrl C (SIGINT) in a C# Console Application?

Strg C (SIGINT) in einer C#-Konsolenanwendung erfassen

Bei der Arbeit mit C#-Konsolenanwendungen kann es erforderlich sein, den Tastendruck Strg C (SIGINT) abzufangen Führen Sie bestimmte Bereinigungsaufgaben durch, bevor die Anwendung beendet wird. Dieser Artikel befasst sich mit den Best Practices für die Erfassung von SIGINT in C#-Konsolenanwendungen.

Verwendung des Console.CancelKeyPress-Ereignisses

Der empfohlene Ansatz besteht darin, das Console.CancelKeyPress-Ereignis zu abonnieren, das ausgelöst wird, wenn das Der Benutzer drückt Strg C. Durch die Bereitstellung eines Delegaten für dieses Ereignis können Sie Bereinigungscode vor der Anwendung ausführen Ausgänge.

public static void Main(string[] args)
{
    Console.CancelKeyPress += delegate {
        // Cleanup code
    };

    while (true) {}
}
Nach dem Login kopieren

Dieser Ansatz weist jedoch Einschränkungen auf. Nach dem Bereinigungsdelegaten platzierter Code wird möglicherweise nicht ausgeführt, wenn Strg C gedrückt wird.

Alternativer Ansatz: Verwenden von Set-Reset-Ereignissen

In Szenarien, in denen eine sofortige Unterbrechung unerwünscht ist, möchten Sie möglicherweise den ordnungsgemäß beenden Anwendung, wenn eine Berechnung oder Aufgabe abgeschlossen ist. Durch die Verwendung von Set-Reset-Ereignissen können Sie den Beendigungsprozess steuern:

private static bool keepRunning = true;

public static void Main(string[] args)
{
    Console.CancelKeyPress += (sender, e) => {
        e.Cancel = true;
        keepRunning = false;
    };

    while (keepRunning) {
        // Task execution
    }

    Console.WriteLine("Exited gracefully");
}
Nach dem Login kopieren

Wenn Strg C gedrückt wird, wird e.Cancel auf „true“ gesetzt, wodurch ein sofortiges Beenden verhindert wird. Die Variable keepRunning wird auf „false“ gesetzt, was dazu führt, dass die while-Schleife beendet wird, nachdem die aktuelle Aufgabe abgeschlossen ist. Dadurch kann die Anwendung ordnungsgemäß beendet werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Strg C (SIGINT) in einer C#-Konsolenanwendung ordnungsgemäß handhaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage