Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中暂停循环(while、foreach、for或其他)?_C#_Loops - Fatal编程技术网

如何在C#中暂停循环(while、foreach、for或其他)?

如何在C#中暂停循环(while、foreach、for或其他)?,c#,loops,C#,Loops,有没有一种方法可以在不阻塞的情况下将循环暂停指定的时间?我不想使用Thread.Sleep(xx)。是否有方法使用手动事件或调度程序计时器暂停循环?我不想使用thread.sleep,因为它会阻塞线程,我不想这样 编辑: 我想做的与这里的帖子类似: 这里没有回答,所以我已经解释了我需要在这里做什么 我无法打开串行端口并使其保持打开状态,每次都必须将其关闭。所以,我要做的是点击循环中的第一项,打开组件,写入它,读取它,然后关闭它。如果你曾经在windows上使用过鼠标或蓝牙扫描仪,你就会知道并不

有没有一种方法可以在不阻塞的情况下将循环暂停指定的时间?我不想使用Thread.Sleep(xx)。是否有方法使用手动事件或调度程序计时器暂停循环?我不想使用thread.sleep,因为它会阻塞线程,我不想这样

编辑:

我想做的与这里的帖子类似:

这里没有回答,所以我已经解释了我需要在这里做什么

我无法打开串行端口并使其保持打开状态,每次都必须将其关闭。所以,我要做的是点击循环中的第一项,打开组件,写入它,读取它,然后关闭它。如果你曾经在windows上使用过鼠标或蓝牙扫描仪,你就会知道并不是每个组件都会一直发回消息。因此,如果一个端口没有发送回消息,它就必须超时。如果短时间内没有收到消息,我需要继续

如果第一次没有响应,我可能会用不同的消息再次访问同一端口。当我这样做时,我得到一个错误,即端口已经打开;是的,因为循环只是在代码中穿行,没有足够的停顿

sleep只是阻止线程,以及comport发送回它的消息,我不知道为什么,它只是阻止了。我宁愿不使用thread.sleep

当我循环它时,我希望它暂停,直到我关闭端口,然后从循环中的下一项开始。这是最重要的部分

有没有办法启动循环、在新线程上生成方法、暂停调用它的循环、等待返回消息或时间限制,然后在另一个线程这样说时让循环继续?谢谢

编辑

我用了自动复位器。感谢您的帮助

使用。它允许您暂停一个线程,直到另一个线程发出继续执行的信号


在提供的链接中,底部有一个示例,其中显示了如果暂停某个内容,该内容将被定义阻止,如何使用该内容。暂停一个线程肯定会将控制权交给其他线程

除非你需要别的东西而不是暂停

什么是暂停给你-也许如果你更新你的问题

我刚想出来-也许你想暂停一下,让UI运行-然后做一些类似的事情(在循环的每个步骤中):


这将使GUI对您做出响应,并使您的循环变慢。

您能否发布一个您试图暂停的代码示例,以及关于您为什么要暂停的其他信息(即您试图实现什么)。我不明白您试图做什么……您正在编写什么类型的应用程序?WinForms客户端?WPF?银灯?ASP.NET服务器端代码?windows服务?还有别的吗?您使用的是哪个版本的.NET?Thread.Sleep()不会阻止任何内容。它只是浪费了一根线。可用于少量螺纹(<10)。
int times = 100;
while (times > 0) 
{
    Application.DoEvents();
    Thread.Sleep(10);
    times--;
}