C#保持线程活动直到事件发生

时间:2015-08-17 18:00:32

标签: c# multithreading events thread-sleep

在特定事件发生之前,如何让线程保持活动状态?我有一个客户端线程正在等待来自服务器的消息,该消息将在客户端上引发一个事件(我不能改变这种行为)。有多个此类客户端正在等待MessageReceived事件。应该尽可能少的延迟,因此让线程休眠一段时间不是一个好选择。

目前,我唯一提出的选择是让线程忙于while循环,以便在事件触发时它们处于活动状态。还有更好的选择吗?

2 个答案:

答案 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切换互斥。