首頁 >後端開發 >C++ >如何捕獲C#中的控制台應用程序退出事件?

如何捕獲C#中的控制台應用程序退出事件?

Patricia Arquette
Patricia Arquette原創
2025-01-28 09:51:08786瀏覽

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

優雅地處理C#

中的控制台應用程序終止

構建控制台應用程序時,適當的資源管理至關重要。 一個普遍的需求是在應用程序退出之前執行清理任務。雖然C#沒有為此提供直接事件,但我們可以利用Windows API實現此功能。

>解決方案涉及設置控制台控制處理程序以響應各種終止信號。 這允許在應用程序關閉之前執行自定義代碼,以確保正確發布資源。

這是一個實用的實現:

此代碼會在控制台接收終止信號時(例如Ctrl c,關閉窗口,系統關閉)時,該代碼會登記一個處理程序(
<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>
)。

>功能執行必要的清理任務。 從處理程序返回ConsoleHandler表示事件的成功處理。 不優雅地處理事件可能會導致資源洩漏或數據損壞。 ConsoleHandler>

以上是如何捕獲C#中的控制台應用程序退出事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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