多次重复的ManualResetEvent(WaitOne和Set)

时间:2019-05-16 17:11:33

标签: c# manualresetevent

是否可以多次重复ManualResetEvent?

类似这样的东西:

receivedDone.WaitOne();
//something here
receivedDone.Set(); //this go back to receivedDone.WaitOne()
//when executing the second time will loop the receivedDone.Set() and not returning 
//again to receivedDone.WaitOne(); like I wanted.

所以我的问题是:

是否可以像同一个WaitOne()一样循环执行多次;和Set();?

编辑:

我有一个按钮,当我单击它时,会运行一个函数来启动我的tcpclient。

此后,当我在缓冲区中收到消息时,我会等待服务器发出receivedDone.WaitOne();的响应,然后将消息转到receivedDone.Set();。这工作1次,但我想使用相同的WaitOne()多次进行;和Set();

这可能吗?

1 个答案:

答案 0 :(得分:1)

顾名思义,ManualResetEvent必须手动重置。就像一扇门。用

初始化
ManualResetEvent ev = new ManualResetEvent(false);  // The door is closed

ManualResetEvent ev = new ManualResetEvent(true);  // The door is open

如果打开的话,调用WaitOne的线程会通过门,否则将在门上等待直到打开。

一个呼叫

ev.Set();

打开门,呼叫

ev.Reset();

关上门。

据我了解您的问题,AutoResetEvent会有所帮助。甚至更好地创建一个异步函数,该函数继续进行TCP调用并返回结果。