Maison >développement back-end >C++ >Comment puis-je capturer les événements de sortie de l'application de console en C #?

Comment puis-je capturer les événements de sortie de l'application de console en C #?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-28 09:51:08806parcourir

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

Gestion gracieusement la terminaison des applications de la console en C #

La gestion appropriée des ressources est primordiale lors de la création d'applications de console. Un besoin courant consiste à exécuter des tâches de nettoyage avant la sortie de l'application. Bien que C # n'offre pas d'événement direct pour cela, nous pouvons tirer parti de l'API Windows pour réaliser cette fonctionnalité.

La solution consiste à définir un gestionnaire de contrôle de la console pour répondre à divers signaux de terminaison. Cela permet d'exécuter un code personnalisé avant l'arrêt de l'application, garantissant que les ressources sont correctement publiées.

Voici une implémentation pratique:

<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>

Ce code enregistre un gestionnaire (ConsoleHandler) qui s'appelle lorsque la console reçoit un signal de terminaison (par exemple, Ctrl C, fermant la fenêtre, arrêt du système). La fonction ConsoleHandler effectue les tâches de nettoyage nécessaires. Le retour true du gestionnaire signifie un traitement réussi de l'événement. Le fait de ne pas gérer l'événement gracieusement peut entraîner des fuites de ressources ou une corruption de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn