Maison >développement back-end >C++ >Comment puis-je gérer gracieusement Ctrl C (SIGINT) dans une application console C# ?

Comment puis-je gérer gracieusement Ctrl C (SIGINT) dans une application console C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 05:35:09297parcourir

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

Capturer Ctrl C (SIGINT) dans une application console C#

Lorsque vous travaillez avec des applications console C#, il peut s'avérer nécessaire d'intercepter la frappe Ctrl C (SIGINT) pour effectuez des tâches de nettoyage spécifiques avant la fermeture de l'application. Cet article examine les meilleures pratiques pour capturer SIGINT dans les applications console C#.

Utilisation de l'événement Console.CancelKeyPress

L'approche recommandée consiste à s'abonner à l'événement Console.CancelKeyPress, qui se déclenche lorsque le l'utilisateur appuie sur Ctrl C. En fournissant un délégué à cet événement, vous pouvez exécuter du code de nettoyage avant que l'application sorties.

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

    while (true) {}
}

Cependant, cette approche a des limites. Le code placé après le délégué de nettoyage peut ne pas s'exécuter lorsque Ctrl C est enfoncé.

Approche alternative : utilisation des événements Set-Reset

Dans les scénarios où une interruption immédiate n'est pas souhaitable, vous souhaiterez peut-être quitter progressivement le application lorsqu’un calcul ou une tâche est terminé. L'utilisation d'événements set-reset vous permet de contrôler le processus de sortie :

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");
}

Lorsque Ctrl C est enfoncé, e.Cancel est défini sur true, empêchant une sortie immédiate. La variable keepRunning est définie sur false, ce qui entraîne la fin de la boucle while une fois la tâche en cours terminée. Cela permet à l'application de se fermer normalement.

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