C# 控制台读取键超时
我已经构建了一个简单的控制台应用程序,我需要给用户一个特定的时间来输入keychar 我应该用这个吗C# 控制台读取键超时,c#,C#,我已经构建了一个简单的控制台应用程序,我需要给用户一个特定的时间来输入keychar 我应该用这个吗 System.Threading.Thread.Sleep(1000); 对于那些不理解的人,我需要程序跳过Console.ReadKey().KeyChar在x秒之后 这可能吗?问题:如果使用Thread.Sleep()等待1秒,它将在给定的时间段内挂起主线程 解决方案:您可以使用System.Timers.Timer等待给定的时间量 试试这个: System.Timers.Time
System.Threading.Thread.Sleep(1000);
对于那些不理解的人,我需要程序跳过Console.ReadKey().KeyChar代码>在x
秒之后
这可能吗?问题:如果使用Thread.Sleep()
等待1秒,它将在给定的时间段内挂起主线程
解决方案:您可以使用System.Timers.Timer
等待给定的时间量
试试这个:
System.Timers.Timer timer1 = new System.Timers.Timer();
timer1.Interval=1000;//one second
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
timer1.Start();
char ch;
private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
ch=Console.ReadKey().KeyChar;
//stop the timer whenever needed
//timer1.Stop();
}
我会这样做:
DateTime beginWait = DateTime.Now;
while (!Console.KeyAvailable && DateTime.Now.Subtract(beginWait).TotalSeconds < 5)
Thread.Sleep(250);
if (!Console.KeyAvailable)
Console.WriteLine("You didn't press anything!");
else
Console.WriteLine("You pressed: {0}", Console.ReadKey().KeyChar);
DateTime beginWait=DateTime.Now;
while(!Console.KeyAvailable&&DateTime.Now.Subtract(beginWait).TotalSeconds<5)
睡眠(250);
如果(!Console.KeyAvailable)
控制台。WriteLine(“你什么都没按!”);
其他的
WriteLine(“您按下:{0}”,Console.ReadKey().KeyChar);
使用计时器。睡眠会冻结你的gui。这个答案可能是你需要的@OndrejJanacek什么是控制台GUI?@Tony“main loop”显然被标记为与突出显示的问题不重复,尽管它是相关的,并且有些答案实际上是针对这个问题的。我了解到Console.ReadKey和Console.ReadLine在所有场景中的功能差异太大,不适合单一解决方案,因此需要区分代码>将冻结它对我很有效!是的,因为250毫秒明显少于1秒,但gui还是一样freeze@Grundy这就是为什么我使用它的价值。所以我相信它解决了这个问题。这真的很有帮助。我所做的唯一更改是使用System.Diagnostics.Stopwatch而不是DateTime。现在,它让我跳过了子部分。这不是OP需要的,在您的解决方案中,您可以定期调用Console.ReadKey()
,但OP希望跳过Console.ReadKey().KeyChar;x之后seconds@Grundy:这不是精确的解决方案,因为OP刚才问我应该使用它吗?Thread.Sleep()
它回答了我的问题。如果他展示了他的代码,我会提供确切的解决方案。OP问他如何使用它来解决具体问题,但在你的回答中有其他的东西