gpt4 book ai didi

c# - 如何确定EventWaitHandle.WaitOne是否在辅助线程中被调用

转载 作者:行者123 更新时间:2023-12-03 13:20:33 31 4
gpt4 key购买 nike

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

当辅助线程进入等待状态时,是否可以通过任何方式向主线程发出信号?

我尝试使用System.Threading.ThreadState属性来确定在调用WaitSleepJoin -method时线程是否处于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();
}
}

关于c# - 如何确定EventWaitHandle.WaitOne是否在辅助线程中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918199/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com