1

セカンダリ スレッドを生成するメイン スレッドがあります。このセカンダリ スレッドは、EventWaitHandle.WaitOne特定の操作を実行した後に待機するために を使用しています。

セカンダリスレッドが待機状態になったときにメインスレッドに通知する方法はありますか?

System.Threading.ThreadStateプロパティを使用して、メソッドが呼び出されたときにスレッドがWaitSleepJoin状態にあるかどうかを判断しようとしましWaitOne()たが、スレッドが常に状態にあるように見えるため、このアプローチは機能しないようですRunning

4

1 に答える 1

3

2 番目の ManualResetEvent を使用して、メイン スレッドにシグナルを送ることができます。

ワーカースレッドで:

signalEWH.Set();

commonEWH.WaitOne();

signalEWM.Reset();

メインスレッドで

var isWaiting = signalEWH.WaitOne(0);

次のテストアプリを作成しましたが、問題なく動作します

      class Program
{
    static void Main(string[] args)
    {
        var thr = new Thread(new ThreadStart(SecondThread));
        thr.IsBackground = true;
        thr.Start();

        firstEvent.WaitOne();

        var isSleep = thr.ThreadState.HasFlag(ThreadState.WaitSleepJoin);
    }

    static ManualResetEvent firstEvent = new ManualResetEvent(false);
    static ManualResetEvent secondEvent = new ManualResetEvent(false);

    static void SecondThread()
    {
        firstEvent.Set();
        secondEvent.WaitOne();
        firstEvent.Reset();
    }
}
于 2013-06-04T12:52:48.107 に答える