2014-04-06 21 views
0

System.Threading.thread.Sleep(1000);暫停整個程序1秒鐘,但是當這秒鐘結束時,它會做這一段時間所能做的一切。例如:Thread.Sleep - 如何正確使用它?

Thread.Sleep(1000); 
Console.WriteLine("A"); 
Thread.Sleep(1000); 
Console.Writeline("B"); 

將等待兩秒鐘,寫

一個

如何正確使用暫停?

+0

無法重現此操作。這是整個代碼?我問,因爲在你的例子中有一個錯字:'Writeline'應該是'WriteLine'。 – Stijn

+6

一般來說,使用'Thread.Sleep'的正確方法是根本不使用它。你想做什麼?這很可能是您要做的事情,而不需要讓線程進入睡眠狀態。 –

+0

我試圖在程序中運行一個單獨的無限線程,但在它的迭代之間必須有1秒鐘的中斷。這個「代碼」可能是我試圖做的一個壞示例 – user3493623

回答

1

Thread.Sleep()行爲就像你想象的那樣;它只是將當前線程暫停大約給定的毫秒數。

這裏的問題是,標準輸出流不一定在每次調用寫入時刷新到控制檯(或指向的任何位置)。相反,它可能會緩存一些內容,以便將其寫入更大的塊以提高效率。嘗試撥打Console.Out.Flush();在每個WriteLine()之後,你應該看到你期望的結果。

+0

這不僅僅是關於控制檯應用程序。 WinForms的行爲方式相同 – user3493623

+0

是否有任何方法可以暫停任何類型或單個線程的應用程序? – user3493623

+0

@ user3493623 Thread.Sleep()將暫停任何類型的應用程序。如果您想要定期發生某些事情,請考慮使用計時器 – ChaseMedallion

4

如果您希望每秒發生一次事件,請創建一個計時器。例如:

private System.Threading.Timer _timer; 

void main() 
{ 
    _timer = new Timer(TimerTick, null, 1000, 1000); 
    // do other stuff in your main thread 
} 

void TimerTick(object state) 
{ 
    // do stuff here 
} 

有幾種不同類型的定時器。如果你正在編寫一個控制檯程序,那麼我會建議使用System.Threading.Timer。在Windows窗體應用程序中,可以使用System.Windows.Forms.TimerSystem.Timers.Timer。有關更多信息,請參閱Timers

相關問題