如何确定是否在辅助线程中调用了EventWaitHandle.WaitOne

时间:2013-06-04 12:44:44

标签: c# multithreading

我有一个主线程产生一个辅助线程。该辅助线程在执行某些特定操作后使用EventWaitHandle.WaitOne等待。

当辅助线程进入等待状态时,有没有办法让主线程发出信号?

我尝试使用System.Threading.ThreadState属性来确定调用WaitSleepJoin方法时线程是否处于WaitOne()状态,但这种方法似乎不起作用,因为线程总是出现处于Running州。

1 个答案:

答案 0 :(得分:3)

您可以使用第二个ManualResetEvent来发出主线程信号:

在工作线程中:

signalEWH.Set();

commonEWH.WaitOne();

signalEWM.Reset();

在主线程中

var isWaiting = signalEWH.WaitOne(0);

我已经编写了fololowing测试应用程序,它对我来说很好用

      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();
    }
}