繁体   English   中英

在使用程序时使用Thread.Sleep

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM