是否可以多次重复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();
这可能吗?
答案 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调用并返回结果。