3

いくつかのイベントを設定するアプリがあり、終了する前にそれらのイベントが発生するのを待つ必要があります。これを行う最善の方法は何ですか?Thread.Sleep は、スリープしている場合はイベントを処理することさえできないという事実を含むさまざまな理由から、適切な選択ではないことを理解しています。もちろん、何もしない while ループで CPU サイクルを浪費するつもりはありません。では、発生したイベントを処理できるように、コンソール アプリが一定時間終了しないようにする最も簡単な方法は何でしょうか?

最終的には、これは問題のないサービスになる予定ですが、現在、最初のイテレーションで、実際のサービスにするという問題を解決する前に、コンソール アプリでコードの一部をテストしています。 (以前にサービスを作成したことがないので、次のステップを複雑にしないように、コードがしっかりしていることを確認したいと思います)。これを書いているときに、代わりに WinForms アプリでテストするだけで問題が解決することに気付きました。

4

2 に答える 2

1

これに基づいて、コンソール アプリケーションとしても実行およびデバッグできるサービスを作成しました

「もっと複雑にする」アプローチも私にはうまくいきませんでした。

于 2012-06-25T19:10:01.940 に答える
1

良いオプションは、ManualResetEventを使用することです。これにより、スリープせずに、イベントが設定されるのを待っている間にブロックできます。コンソール アプリケーションのメイン ルーチンは、ブロックする をWaitOne()呼び出すことができます。ManualResetEventルーチンが終了したら、 を呼び出しManualResetEvent.Set()て、コンソール アプリケーションをシャットダウンできるようにします。

イベントのコレクションを待機する必要がある場合は、CountdownEventが別のオプションです。AddCount()およびを呼び出しSignalて、必要に応じてカウントを増減できます。

于 2012-06-22T23:07:40.973 に答える