2011-01-27 51 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"); 
    } 
}