Console.ReadLine Break

时间:2011-01-27 20:10:11

标签: c# console sleep

我正在试图弄清楚如何使用Console.ReadLine和一个计时器。我的控制台程序旨在自动运行一个长进程,此进程在上一个进程完成后每30秒重新启动一次。我希望通过键入命令让用户能够打破自动运行。如果我使用Console.ReadLine(),它将等到用户输入内容,而我希望程序在30秒内没有输入任何内容的情况下继续循环。 。 。有什么想法??

例如:

  

RunProcess>用户输入等待30秒。如果没有:继续循环

非常感谢!

2 个答案:

答案 0 :(得分:4)

您可以在单独的线程上运行计时器。当用户输入文本时,将其存储在两个线程都可访问的变量中。当计时器滴答时,查看是否输入了任何内容并继续相应。

确保线程安全: - )

修改

您可以使用System.Threading.Timer每30秒打一次,并在其回调方法中检查文本是否已设置。

答案 1 :(得分:2)

请勿使用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");
    }
}