在特定事件发生之前,如何让线程保持活动状态?我有一个客户端线程正在等待来自服务器的消息,该消息将在客户端上引发一个事件(我不能改变这种行为)。有多个此类客户端正在等待MessageReceived事件。应该尽可能少的延迟,因此让线程休眠一段时间不是一个好选择。
目前,我唯一提出的选择是让线程忙于while循环,以便在事件触发时它们处于活动状态。还有更好的选择吗?
答案 0 :(得分:2)
使用ManualResetEvent
。您可以创建此对象,然后使用WaitOne()
然后从另一个线程调用Set()
以释放之前的阻止调用。
示例:
ManualResetEvent mre = new ManualResetEvent();
public void OnOneThread()
{
//Block here until "OnAnotherThread" is done
mre.WaitOne();
}
public void OnAnotherThread()
{
DoWork();
//Release the other thread
mre.Set();
}
答案 1 :(得分:0)
不知道它会有多大帮助,
我曾经做过什么来处理我曾经做过的练习中的多线程,
它更像是一种在线程之间进行同步的解决方案,但我想它也适合
我使用了互斥锁,并且在线程调用的函数中我添加了一个WaitOne()(我认为它被称为那种方式),
一旦我想要线程,我解锁了互斥锁。
您也可以这样做,也许在事件发生时,解锁互斥锁。
编辑:我上面的答案是真的。混合的东西上面,它是一个ManualResetEvent而不是互斥锁。
但你也可以使用我写的方法,只需用ManualResetEvent切换互斥。