0

我正在尝试我的第一个基于 c# 控制台的游戏。我创建了一个居中的学分介绍,最后印有“按任意键继续...”。我曾经Console.ReadKey()在等待用户输入时模拟暂停。问题是您可以“堆叠”输入,可能有一个更好的术语,但本质上,当控制台处于超时状态时,仍会读取关键输入并排队等待超时结束。例如;

//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()仍然有效时按一个键,readkey,时间到后将打印该字符。有谁知道如何停止读取密钥?

如果您想要实际的项目代码,请询问。虽然我认为这与这个问题无关。

4

1 回答 1

1

如果你想在等待一个键之前清除缓冲区,你可以Console.ReadKey(true)在循环中调用,只要有KeyAvailable. 传递true给该方法指定密钥应该被截获而不是输出到控制台窗口。

例如:

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;
于 2019-11-05T07:27:00.650 回答