簡體   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