ReadKey 在线程超时结束之前按下字符
ReadKey getting characters pressed before a thread timeout has ended
我正在尝试我的第一个基于 c# 控制台的游戏。我创建了一个居中的演职员表介绍,最后印有 "press any key to continue..."。我使用 Console.ReadKey()
来模拟等待用户输入时的暂停。问题是你可以 'stack' 输入,可能有一个更好的术语,但本质上,当控制台处于超时状态时,键输入仍然被读取并排队直到超时结束。
例如;
//10 second wait
//this is where I would press a key
Thread.Sleep(10000);
char x = Console.ReadKey().KeyChar;
//x will be equal to whatever key I pressed before the timeout
这不是我想要的功能。有没有人对此有解决方案,例如;不使用 Thread.Sleep()
或 Console.ReadKey()
如果你还是不明白问题,在Thread.Sleep()
仍然有效的时候按一个键,读键,时间到后会打印那个字符。有谁知道如何停止读取密钥?
如果您想要实际的项目代码,请直接询问。虽然我认为它与这个问题无关。
如果你想在等待键之前清空缓冲区,你可以循环调用Console.ReadKey(true)
,只要有一个KeyAvailable
。将 true
传递给该方法指定应拦截密钥而不是将其输出到控制台 window.
例如:
Thread.Sleep(TimeSpan.FromSeconds(10));
// Clear buffer by "throwing away" any keys that were pressed while we were sleeping
while(Console.KeyAvailable) Console.ReadKey(true);
char x = Console.ReadKey().KeyChar;
我正在尝试我的第一个基于 c# 控制台的游戏。我创建了一个居中的演职员表介绍,最后印有 "press any key to continue..."。我使用 Console.ReadKey()
来模拟等待用户输入时的暂停。问题是你可以 'stack' 输入,可能有一个更好的术语,但本质上,当控制台处于超时状态时,键输入仍然被读取并排队直到超时结束。
例如;
//10 second wait
//this is where I would press a key
Thread.Sleep(10000);
char x = Console.ReadKey().KeyChar;
//x will be equal to whatever key I pressed before the timeout
这不是我想要的功能。有没有人对此有解决方案,例如;不使用 Thread.Sleep()
或 Console.ReadKey()
如果你还是不明白问题,在Thread.Sleep()
仍然有效的时候按一个键,读键,时间到后会打印那个字符。有谁知道如何停止读取密钥?
如果您想要实际的项目代码,请直接询问。虽然我认为它与这个问题无关。
如果你想在等待键之前清空缓冲区,你可以循环调用Console.ReadKey(true)
,只要有一个KeyAvailable
。将 true
传递给该方法指定应拦截密钥而不是将其输出到控制台 window.
例如:
Thread.Sleep(TimeSpan.FromSeconds(10));
// Clear buffer by "throwing away" any keys that were pressed while we were sleeping
while(Console.KeyAvailable) Console.ReadKey(true);
char x = Console.ReadKey().KeyChar;