【发布时间】:2019-01-13 02:08:28
【问题描述】:
我有以下代码,它等待用户通过箭头键输入移动,或退出以结束程序。
Console.WriteLine(startNode.Render(true));
LevelState currentNode = startNode;
while (Console.ReadKey(true).Key != ConsoleKey.Escape)
{
if (Console.ReadKey(true).Key == ConsoleKey.UpArrow)
{
Console.WriteLine("up");
LevelState move = currentNode.StepInDirection(CardinalDirection.Up);
if (move != null)
{
currentNode = move;
Console.WriteLine(currentNode.Render(true));
}
}
//ditto for the other 3 directions
}
但是,它只是偶尔承认我的输入。例如,如果我快速点击退出键,大多数时候什么都不会发生。所以 Console.ReadKey 方法对我来说似乎非常不可靠。有什么更好的选择?
【问题讨论】:
-
您的读取键模式似乎错误
-
您一直在循环中读取键,这是您的问题。在最坏的情况下,您需要按 ESC 的次数与循环中的
if (Console.ReadKey(true).Key == ...行一样多。 (基本上,对于循环中出现的每个 Console.ReadKey(true),您都需要再次按一个键,然后才能返回 ESC 键检查...) -
不是在循环中多次读取键,而是每次循环迭代只读取一次键并将其分配给变量。然后检查这个变量的值是ESC键,还是其他键。
-
看看
Console.KeyAvailable:docs.microsoft.com/en-us/dotnet/api/…
标签: c# .net console console.readkey readkey