Maison >développement back-end >C++ >Comment puis-je gérer les événements de sortie des applications de console en C #?

Comment puis-je gérer les événements de sortie des applications de console en C #?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-28 09:47:07936parcourir

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

Arrêt gracieux dans les applications de la console C #: Gestion des événements de sortie

Les applications de console C # multi-thread nécessitent des procédures de nettoyage robustes lors de la résiliation pour assurer une bonne gestion des ressources. Bien que .NET n'offre pas un événement de sortie intégré, nous pouvons tirer parti de l'API WIN32 pour une solution fiable.

L'absence d'un événement .NET direct

Malheureusement, le .NET Framework n'a pas un événement direct pour détecter la sortie de l'application.

Utilisation de l'API Win32: une approche pratique

La fonction SetConsoleCtrlHandler de l'API Win32 fournit un mécanisme pour enregistrer un gestionnaire pour divers signaux de contrôle, y compris la fermeture de la console. Cela permet d'exécuter du code personnalisé avant la fin de l'application.

Exemple de code: implémentation d'un gestionnaire de sortie de console

l'extrait de code suivant montre l'enregistrement d'un gestionnaire pour les événements de fermeture de la console:

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

// ... other using statements ...

public class Program
{
    [DllImport("Kernel32.dll")]
    private static extern bool SetConsoleCtrlHandler(HandlerRoutine handler, bool add);

    private delegate bool HandlerRoutine(CtrlTypes ctrlType);

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

    private static bool Handler(CtrlTypes ctrlType)
    {
        Console.WriteLine("Console exit event detected: " + ctrlType);
        // Perform cleanup operations here (e.g., closing files, stopping threads)
        return true; // Indicate that the handler processed the event
    }

    public static void Main(string[] args)
    {
        SetConsoleCtrlHandler(Handler, true);
        // ... your application's main logic ...
        Console.ReadKey(); // Keep the console open until a key is pressed
    }
}</code>

Considérations et limitations importantes:

Cette approche repose sur l'API Windows et peut ne pas être directement portable dans les environnements non Windows. La fonction Handler doit effectuer toutes les tâches de nettoyage nécessaires, telles que la fermeture des fichiers, la libération de ressources et la garantie de terminaison de thread avant de retourner true. Le retour false indique que le gestionnaire de système par défaut doit être invoqué. N'oubliez pas de gérer les exceptions potentielles dans la fonction Handler.

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