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