首頁 >後端開發 >C++ >如何在 C# 控制台應用程式中優雅地處理 Ctrl C (SIGINT)?

如何在 C# 控制台應用程式中優雅地處理 Ctrl C (SIGINT)?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-27 05:35:09297瀏覽

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

在C# 控制台應用程式中捕獲Ctrl C (SIGINT)

使用C# 控制台應用程式時,可能需要捕獲Ctrl C (SIGINT) 擊鍵在應用程式退出之前執行特定的清理任務。本文深入探討了在 C# 控制台應用程式中捕捉 SIGINT 的最佳實踐。

利用 Console.CancelKeyPress 事件

建議的方法是訂閱 Console.CancelKeyPress 事件,該事件會在以下情況下觸發:使用者按下 Ctrl C。透過為此事件提供委託,您可以在應用程式之前執行清理程式碼退出。

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

    while (true) {}
}

但是,這種方法有其限制。按下 Ctrl C 時,放置在清理委託之後的程式碼可能不會執行。

替代方法:使用設定-重設事件

在不希望立即中斷的情況下,您可能希望優雅地退出計算或任務完成時的應用程式。使用設定重置事件可以控制退出過程:

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

按下 Ctrl C 時,e.Cancel 設定為 true,防止立即退出。 keepRunning 變數設定為 false,導致 while 迴圈在目前任務完成後終止。這允許應用程式正常退出。

以上是如何在 C# 控制台應用程式中優雅地處理 Ctrl C (SIGINT)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn