C#技术问询:如何通过键盘输入重置时钟并解决循环终止问题
如何通过键盘输入实现时钟重置?
我明白你遇到的困扰了——按下空格键启动时钟后,没法中途按r键重置,对吧?根源确实出在Console.ReadKey()的使用上,它会阻塞线程等待输入,导致时钟循环里没法及时响应重置指令。
下面是修正后的代码,我调整了按键处理逻辑,让你既能正常运行时钟,又能随时触发重置:
public static void Main(string[] args) { Clock myclock = new Clock(); while (true) { Console.WriteLine("Press 'spacebar' to start the time and 'r' to reset the time"); if (Console.ReadKey().Key == ConsoleKey.Spacebar) { for (int i = 0; i < 86400;i++) { myclock.displayTime(); Thread.Sleep(1000); myclock.Update(); // 关键改进:先检查是否有按键输入,避免阻塞时钟运行 if (Console.KeyAvailable) { ConsoleKeyInfo cki = Console.ReadKey(true); // true表示不显示输入的字符 if (cki.Key == ConsoleKey.R) { myclock.ClockReset(); Console.WriteLine("\nClock has been reset"); break; // 跳出时钟循环,回到初始选择界面 } } } } } }
关键改进点说明:
- 使用
Console.KeyAvailable预先检查是否有按键输入,避免阻塞时钟的正常计时流程 - 通过
Console.ReadKey(true)读取按键时不显示输入字符,保持控制台界面整洁 - 在时钟的每秒更新循环中加入按键检查,确保可以随时响应
r键的重置指令,重置完成后跳出计时循环回到初始选择界面
内容的提问来源于stack exchange,提问作者Leo Chong
相关产品推荐
相关产品推荐

