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