可能的重复:
如何向 Console.ReadLine() 添加超时? https://stackoverflow.com/questions/57615/how-to-add-a-timeout-to-console-readline
如果我有一个 Console.ReadKey(),它会让整个程序卡住,我怎样才能让它读取一个键 1 秒,如果一个键没有被读取,就会设置其他东西。
控制台有一个属性KeyAvailable
。但您想要的功能(超时)不可用。你可以编写自己的函数
private static ConsoleKeyInfo WaitForKey(int ms)
{
int delay = 0;
while (delay < ms) {
if (Console.KeyAvailable) {
return Console.ReadKey();
}
Thread.Sleep(50);
delay += 50;
}
return new ConsoleKeyInfo((char)0, (ConsoleKey)0, false, false, false);
}
此函数循环,直到所需的时间(以毫秒为单位)过去或按下某个键。它在调用之前检查密钥是否可用Console.ReadKey();
。支票Console.KeyAvailable
无论密钥是否可用,都会立即继续。它返回true
如果一个键已被按下并准备好被读取ReadKey
and false
否则。如果没有可用的键,该函数将休眠 50 毫秒,直到执行下一个循环。这比不休眠的循环更好,因为这会给你 100% 的 CPU 使用率(在一个核心上)。
该函数返回一个ConsoleKeyInfo
as ReadKey
会,如果您想知道用户按下了哪个键。最后一行创建一个空的ConsoleKeyInfo
(see ConsoleKeyInfo结构 http://msdn.microsoft.com/en-us/library/system.consolekeyinfo.aspx and ConsoleKeyInfo 构造函数 http://msdn.microsoft.com/en-us/library/system.consolekeyinfo.consolekeyinfo.aspx)。它允许您测试用户是否按下了某个键或者该函数是否超时。
if (WaitForKey(1000).KeyChar == (char)0) {
// The function timed out
} else {
// The user pressed a key
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)