我有一个主线程,它产生一个辅助线程。该辅助线程EventWaitHandle.WaitOne
在执行某些特定操作后使用 等待。
当辅助线程进入等待状态时,有什么方法可以向主线程发出信号?
我尝试使用System.Threading.ThreadState
属性来确定调用 - 方法时线程是否处于WaitSleepJoin
状态WaitOne()
,但这种方法似乎不起作用,因为线程似乎总是处于Running
状态。
我有一个主线程,它产生一个辅助线程。该辅助线程EventWaitHandle.WaitOne
在执行某些特定操作后使用 等待。
当辅助线程进入等待状态时,有什么方法可以向主线程发出信号?
我尝试使用System.Threading.ThreadState
属性来确定调用 - 方法时线程是否处于WaitSleepJoin
状态WaitOne()
,但这种方法似乎不起作用,因为线程似乎总是处于Running
状态。
您可以使用第二个 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();
}
}