1

使用时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这段代码不允许我在睡眠时使用其他对象,那么有没有替代方法,我仍然可以在循环睡眠时使用我的程序的其余部分?

4

3 回答 3

3

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

看一下Thread 类

于 2013-08-13T21:56:33.663 回答
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 的回答。

于 2013-08-13T22:03:50.503 回答
1

我会考虑在您的应用程序中添加一个计时器并在计时器到达时打印该行。这不会占用您的应用程序。

这里的一个例子定时器

于 2013-08-13T22:01:44.993 回答