Heim >Backend-Entwicklung >C++ >Wie kann ich Konsolenanwendungsereignisse in C#erfassen?

Wie kann ich Konsolenanwendungsereignisse in C#erfassen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-28 09:51:08789Durchsuche

How Can I Capture Console Application Exit Events in C#?

ordnungsgemäß beenden Konsolenantragsbeendigung in C#

ordnungsgemäßes Ressourcenmanagement ist bei Erstellung von Konsolenanwendungen von größter Bedeutung. Vor dem Ablauf der Anwendung ist es üblich, Reinigungsaufgaben auszuführen. Während C# dafür kein direktes Ereignis bietet, können wir die Windows -API nutzen, um diese Funktionalität zu erreichen.

Die Lösung beinhaltet das Einstellen eines Konsolenregelbehälters, um auf verschiedene Kündigungssignale zu reagieren. Dies ermöglicht das Ausführen von benutzerdefinierten Code, bevor die Anwendung abgeschaltet wird, um sicherzustellen, dass die Ressourcen korrekt veröffentlicht werden.

Hier ist eine praktische Implementierung:

<code class="language-csharp">using System;
using System.Runtime.InteropServices;

// Import the necessary Windows API function
[DllImport("Kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(HandlerRoutine handler, bool add);

// Delegate type for the handler routine
private delegate bool HandlerRoutine(CtrlTypes ctrlType);

// Enumeration of control types
enum CtrlTypes
{
    CTRL_C_EVENT = 0,
    CTRL_BREAK_EVENT = 1,
    CTRL_CLOSE_EVENT = 2,
    CTRL_LOGOFF_EVENT = 5,
    CTRL_SHUTDOWN_EVENT = 6
}

// Our handler routine
private static bool ConsoleHandler(CtrlTypes sig)
{
    // Perform cleanup actions here, such as closing files or releasing resources
    Console.WriteLine("Console application is shutting down...");
    // ... your cleanup code ...
    return true; // Indicate that the handler processed the event
}

static void Main(string[] args)
{
    // Set the console control handler
    SetConsoleCtrlHandler(ConsoleHandler, true);

    // Main application logic
    Console.WriteLine("Console application running...");
    Console.ReadKey(); // Keep the console open until a key is pressed
}</code>

Dieser Code registriert einen Handler (ConsoleHandler), der aufgerufen wird, wenn die Konsole ein Terminierungssignal empfängt (z. B. Strg C, Schließung des Fensters, Systemstillstands). Die ConsoleHandler -Funktion führt die erforderlichen Reinigungsaufgaben aus. Rückgabe true vom Handler bedeutet eine erfolgreiche Verarbeitung der Veranstaltung. Das Versäumnis, das Ereignis anmutig zu verarbeiten, kann zu Ressourcenlecks oder Datenverschästung führen.

Das obige ist der detaillierte Inhalt vonWie kann ich Konsolenanwendungsereignisse in C#erfassen?. 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