Maison >développement back-end >C++ >Comment puis-je gérer efficacement les interruptions Ctrl C dans les applications console C# ?

Comment puis-je gérer efficacement les interruptions Ctrl C dans les applications console C# ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-30 20:52:14464parcourir

How Can I Gracefully Handle Ctrl C Interrupts in C# Console Applications?

Gestion de Ctrl C (SIGINT) dans les applications de console C#

En C#, le recouvrement de Ctrl C (SIGINT) permet les nettoyages nécessaires avant de quitter en douceur une application console. L'événement Console.CancelKeyPress fournit un moyen de gérer cette interruption.

Utilisation de Console.CancelKeyPress

Le code suivant montre comment utiliser l'événement CancelKeyPress :

public static void Main(string[] args)
{
    Console.CancelKeyPress += delegate {
        // Perform clean-up actions
    };

    while (true) {}
}

Lorsque l'utilisateur appuie sur Ctrl C, le code du délégué s'exécute, lançant le processus de nettoyage et le programme se termine immédiatement.

Cas d'utilisation spécifiques

Dans les scénarios où l'arrêt immédiat des calculs n'est pas souhaitable, une approche alternative est recommandée :

class MainClass
{
    private static bool keepRunning = true;

    public static void Main(string[] args)
    {
        Console.CancelKeyPress += delegate(object? sender, ConsoleCancelEventArgs e) {
            e.Cancel = true;
            MainClass.keepRunning = false;
        };
        
        while (MainClass.keepRunning) {
            // Perform small chunks of work
        }
        Console.WriteLine("exited gracefully");
    }
}

Cette implémentation définit l'indicateur e.Cancel sur true, empêchant ainsi l'arrêt immédiat du programme. Au lieu de cela, la variable keepRunning est définie sur false, permettant à la boucle while de se terminer une fois les calculs en cours terminés. Cette approche facilite la résiliation gracieuse du programme.

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