使用Thread.Sleep,同时使用程序

时间:2013-08-13 21:53:15

标签: c# winforms sleep

使用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循环只是休眠?

3 个答案:

答案 0 :(得分:3)

在单独的线程中运行您的方法,您可以随意暂停/恢复...

查看Thread class

答案 1 :(得分:2)

你可以使用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的回答。

答案 2 :(得分:1)

我会考虑为您的应用添加一个计时器,并在计时器点击时打印该行。这不会占用您的应用。

此处的示例Timer