1

これら 2 つが連携して機能しているとは確信していないため、これら 2 つが連携して機能することについて質問があります。

バックグラウンドワーカーを使用するコードがいくつかあり、 DoWork() 内でいくつかのロジックを実行します。このロジックは、単純に TcpClient オブジェクトを使用して、データを外部デバイスに送信します。

私の質問は、AutoResetEvent.WaitOne() を呼び出す DoWork() 内にあります。AutoResetEvent.Set() が呼び出されるまで、これは現在のスレッドを停止しますか? たとえば、AutoResetEvent.Set() がまったく呼び出されない場合、バックグラウンド ワーカーは単純に停止し、操作を実行しませんか?

これが本質的に悪い設計であるかどうかはわかりませんが、残念ながらそれをサポートしています:(

いくつかの擬似コードを編集します

bool done = false;
while (!done)
{
  //some logic here
  done = System.DateTime.Now.Hour == 10;

  if (!done)
  {
    AutoResetEvent.WaitOne();
    //Question will the while loop fire again or does it wait for the Set() to be called
    //before continuing?
  }
}
4

1 に答える 1

0

以内DoWork()に私は電話しますAutoResetEvent.WaitOne()AutoResetEvent.Set()が呼び出されるまで、これは現在のスレッドを停止しますか? たとえば、AutoResetEvent.Set()が呼び出されない場合、Background Worker単に停止し、操作を実行しませんか?

MSDN から引用されているように、これに対する答えは「はい」WaitHandle.WaitOne Methodです。

現在の WaitHandle がシグナルを受信するまで、現在のスレッドをブロックします。

EDIT : 追加されたコードについては、while ループが待機します。Set()

于 2013-07-03T10:39:04.817 に答える