【问题标题】:Console.ReadLine BreakConsole.Read换行符
【发布时间】:2011-01-27 20:10:10
【问题描述】:

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

例如:

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

非常感谢!

【问题讨论】:

标签: c# console sleep


【解决方案1】:

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

确保线程安全:-)

编辑:

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

【讨论】:

  • 有什么想法吗?除了后台工作人员之外,我在显式启动线程等方面并没有做太多事情。我以为是后台工作人员,但不知道是否可以将其用作计时器....
【解决方案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");
    }
}

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多