Console.ReadLine Break

3
我正在尝试弄清如何在使用Console.ReadLine和计时器的情况下编写程序。我的控制台程序旨在自动运行长时间进程,并在上一个进程完成后每30秒重新启动此进程。但我希望用户能够通过输入命令来中断自动运行。如果我使用Console.ReadLine(),它将等待用户输入,而我希望程序在30秒内没有输入时继续循环。有什么想法吗?
例如:
RunProcess > 等待30秒以获取用户输入。 如果没有:继续循环
非常感谢!

可能是如何为Console.ReadLine()添加超时?的重复问题。 - csharptest.net
https://dev59.com/P3VD5IYBdhLWcg3wL4mM - csharptest.net
2个回答

4
你可以在另一个线程上运行计时器。当用户输入文本时,将其存储在两个线程都可以访问的变量中。当计时器滴答作响时,查看是否已输入任何内容,并相应地进行处理。
一定要确保线程安全 :-)
编辑:
您可以使用 System.Threading.Timer 每30秒触发一次并在其回调方法中检查文本是否已设置。

有没有关于如何做到这一点的想法?除了后台工作人员,我并没有真正使用过显式启动线程等等。我想过使用后台工作人员,但不知道是否可以在计时器上使用它... - keynesiancross

3
不要使用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");
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接