ホームページ > バックエンド開発 > C++ > C#でコンソールアプリケーションエグジットイベントを処理するにはどうすればよいですか?

C#でコンソールアプリケーションエグジットイベントを処理するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-28 09:47:07
オリジナル
985 人が閲覧しました

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

C#コンソールアプリケーションでの優雅なシャットダウン:出口イベントの処理

マルチスレッドC#コンソールアプリケーションでは、適切なリソース管理を確保するために、終了時に堅牢なクリーンアップ手順が必要です。 .NETは組み込みの出口イベントを提供していませんが、信頼できるソリューションのためにWin32 APIを活用できます。

直接.NETイベントの欠如残念ながら、.NETフレームワークには、アプリケーションの終了を検出するための直接的なイベントがありません。

win32 APIの利用:実用的なアプローチ

win32 APIの関数は、コンソールの閉鎖を含むさまざまなコントロール信号のハンドラーを登録するメカニズムを提供します。これにより、アプリケーションが終了する前にカスタムコードを実行できます。

コードの例:コンソール出口ハンドラーの実装

SetConsoleCtrlHandler

次のコードスニペットは、コンソールの閉鎖イベントのハンドラーを登録することを示しています:

重要な考慮事項と制限:

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
    }
}
ログイン後にコピー
このアプローチはWindows APIに依存しており、非窓環境に直接移植可能ではない場合があります。

関数は、ファイルの閉鎖、リソースのリリース、を返す前にスレッド終了を確保するなど、必要なすべてのクリーンアップタスクを実行する必要があります。 返品は、デフォルトのシステムハンドラーを呼び出す必要があることを示します。

関数内の潜在的な例外を処理することを忘れないでください

以上がC#でコンソールアプリケーションエグジットイベントを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート