2011-01-27 50 views
3

我在想如何使用Console.ReadLine和一個計時器。我的控制檯程序設計爲自動運行一個長時間的過程,這個過程在上一個過程完成後每30秒重新啓動一次。我想讓用戶能夠通過鍵入命令來中斷自動運行。如果我使用Console.ReadLine(),它將等待直到用戶輸入內容,而如果在30秒內沒有輸入任何內容,我希望程序繼續循環。 。 。有什麼想法嗎??Console.ReadLine Break

例如:

RunProcess>等待用戶輸入30秒。如果不是:繼續循環

非常感謝!

+0

的可能重複[如何添加超時到Console.ReadLine()?](http://stackoverflow.com/questions/57615/how-to-add-一個超時到控制檯readline) – 2011-01-27 20:18:24

+0

http://stackoverflow.com/questions/57615/how-to-add-a-timeout-to-console-readline – 2011-01-27 20:18:39

回答

3

你可以在一個單獨的線程上運行你的計時器。當用戶輸入文本時,將其存儲在兩個線程均可訪問的變量中。當計時器滴答時,看看是否輸入了任何內容並相應地繼續。

一定是線程安全的:-)

編輯:

可以使用System.Threading.Timer打勾每30秒,並在其回調方法,檢查文本已設置。

1

請勿使用Console.ReadLine(),但請檢查Console.KeyAvailable是否爲真,然後閱讀Console.ReadKey()以檢查退出情況。

試試這個示例代碼

class Program 
{ 
    static bool done; 
    static void Main(string[] args) 
    { 
     int count = 0;    
     done = false; 
     while (!done) 
     { 
      Thread.Sleep(2000); 
      count++; 
      Console.WriteLine("Calculation #" + count.ToString()); 
      if (Console.KeyAvailable) 
      { 
       ConsoleKeyInfo key = Console.ReadKey(); 
       if (key.Key == ConsoleKey.Escape) 
       { 
        done = true; 
       } 
      }         
     } 
     Console.WriteLine(); 
     Console.WriteLine("end"); 
    } 
}