[英]Using Thread.Sleep, while using program
当使用System.Threading.Thread.Sleep(n)
,我知道它会阻塞程序的线程,从而导致程序无法访问。 例如:无法单击按钮或调出其他表格。
所以我的问题是,还有没有其他可以替代的方法,可以暂停我的一种方法,但仍然允许我使用按钮,并打开其他表单等?
我正在使用的代码杂乱无章,因为我一直在使用System.Threading.Thread.Sleep(1500)
但是这里是:
while(Reader.Read() != null)
{
ApplicationPort.WriteLine(line);
System.Threading.Thread.Sleep(1500);
}
Line只是一个字符串,将在代码的前面进行更新,它的更新速度对于我要完成的工作来说太快了,因此我试图通过使用Sleep
来减慢程序速度。 而ApplicationPort只是一个SerialPort
这段代码不允许我在睡眠时使用其他对象,因此是否有其他选择可以使我在while
循环睡眠时仍可以使用程序的其余部分?
在单独的线程中运行方法,您将可以随意暂停/恢复任意次数...
看一下Thread类
您可以使用while循环和Application.DoEvents
东西:
while(Reader.Read() != null)
{
ApplicationPort.WriteLine(line);
var endDate = DateTime.Now + TimeSpan.FromSeconds(1.5);
while (DateTime.Now() < endDate)
{
Application.DoEvents();
}
}
但是,这是“ hacky”,您应该遵循ArsenMkrt的回答。
我考虑将计时器添加到您的应用中,并在计时器点击时打印该行。 这不会占用您的应用程序。
计时器示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.