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

C#でコンソールアプリケーションの終了を優雅に処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-28 10:01:13269ブラウズ

How Can I Gracefully Handle Console Application Termination in C#?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。