c#コンソールアプリケーションの優雅な終了
マルチスレッドC#コンソールアプリケーションでは、リソースのクリーンアップと適切なスレッド終了を確保するために、堅牢なシャットダウン手順が必要になることがよくあります。 .NETはこれに直接イベントを提供していませんが、インタープロップを活用してコンソール出口信号をキャプチャできます。
:SetConsoleCtrlHandler
を使用しています
ライブラリからのSetConsoleCtrlHandler
関数により、コンソール終了イベント(CTRL C、ログオフ、シャットダウンなど)のカスタムハンドラーの登録が許可されます。このハンドラーは、イベント代表です:Kernel32
<code class="language-csharp">delegate bool EventHandler(CtrlType sig);</code>
シャットダウンハンドラーの実装:
ハンドラー関数は、終了信号を受信するとクリーンアップタスクを実行します:
<code class="language-csharp">private static bool Handler(CtrlType sig) { switch (sig) { case CtrlType.CTRL_C_EVENT: case CtrlType.CTRL_LOGOFF_EVENT: case CtrlType.CTRL_SHUTDOWN_EVENT: case CtrlType.CTRL_CLOSE_EVENT: // Perform cleanup actions (e.g., close files, stop threads) return true; // Signal successful handling default: return false; // Signal unhandled event } }</code>
ハンドラーの登録:
ハンドラーは:SetConsoleCtrlHandler
を使用して登録されています
<code class="language-csharp">SetConsoleCtrlHandler(Handler, true); // true adds the handler</code>関数が呼び出されることを保証します。
Handler
重要なメモ:
この方法の信頼性は、オペレーティングシステムによって異なる場合があります。 クロスプラットフォームの互換性と潜在的な制限の詳細については、関連するドキュメントとコミュニティリソースを参照してください。 予期しない動作を避けるために、関数内でスレッド終端を適切に処理することが重要です。 キャンセルトークンやスレッドセーフシャットダウンメカニズムなどの手法を使用することを検討してください。 このアプローチを実装することにより、マルチスレッドC#コンソールアプリケーションのより制御された予測可能なシャットダウンプロセスを保証できます。
以上がC#でコンソールアプリケーションの終了を優雅に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。