有没有办法在没有阻塞的情况下暂停指定时间的循环?我不想使用Thread.Sleep(xx)。有没有办法使用手动事件或调度程序计时器来暂停循环?我不想使用thread.sleep,因为它阻塞了线程,我不想这样。
编辑:
我想做的就像发布在这里:
serialport responding to EventHandler, but not ReadExisting or ReadLine?
在那里没有回答,所以我已经解释了我需要做什么。
我无法打开串口并保持打开状态,每次都要关闭它。所以,我想要做的是在循环中点击第一项,打开comport,写入它,从中读取,然后关闭它。如果您曾经使用带有Windows的鼠标或蓝牙扫描仪,您知道不是每个comport都会一直发回消息。所以如果一个端口没有发回消息,它必须超时。如果在短时间内没有收到消息,我需要继续。
如果第一次没有响应,我可能会使用不同的消息再次点击同一个端口。当我这样做时,我得到一个错误,该端口已经打开;它是,因为循环只是吹过代码,并没有足够的停顿。
thread.sleep只是阻塞线程,以及comport发送给它的消息,我不知道为什么,它就是这样。我宁愿不使用thread.sleep。
当我遍历它时,我希望它暂停直到我关闭端口,然后从循环中的下一个项开始。这是最重要的部分。
有没有办法启动循环,在新线程上生成一个方法,暂停调用它的循环,等待消息返回或时间限制,然后在另一个线程这样说时继续循环?感谢
编辑
我使用了AutoResetEvent。谢谢你的帮助
答案 0 :(得分:1)
如果您暂停某些内容,则会被定义阻止。暂停一个线程肯定会控制其他线程。
除非你需要其他东西INSTEAD暂停?
什么是对你有用 - 也许你更新了你的问题......
我刚想通了 - 也许你想暂停并让UI运行 - 然后做这样的事情(在你的循环的每一步):
int times = 100;
while (times > 0)
{
Application.DoEvents();
Thread.Sleep(10);
times--;
}
这将使GUI响应你并减慢你的循环。
答案 1 :(得分:0)
使用ManualResetEvent。它允许您暂停一个线程,直到另一个线程发出信号继续执行。
在提供的链接中,底部有一个示例,其中显示了如何使用它