c# - Console.ReadKey 不可靠
问题描述
我有以下代码,它等待用户通过箭头键输入移动,或退出以结束程序。
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 方法对我来说似乎非常不可靠。什么是更好的选择?
解决方案
你打电话的ReadKey
次数太多了
这是一个更好的模式
ConsoleKey key;
while ((key = Console.ReadKey(true).Key) != ConsoleKey.Escape)
{
if (key == ConsoleKey.UpArrow)
{
///
}
//ditto for the other 3 directions
}
或者
// read key once
ConsoleKey key = Console.ReadKey(true).Key;
while (key != ConsoleKey.Escape)
{
if (key == ConsoleKey.UpArrow)
{
///
}
//ditto for the other 3 directions
key = Console.ReadKey(true).Key;
}
推荐阅读
- javascript - 在 for 循环中设置动态键和值
- java - 带有复制粘贴的预填充数据库的房间 fallbackToDestructiveMigration
- php - 如何将重定向的网站刷新到php上的正常页面?
- python-3.x - 机器人框架:如何使用 selenium webdriver 从 Web 应用程序注销并关闭 chrome 浏览器?
- java - Maven:如何覆盖依赖项
- angular - 如何将 JSPDF 生成的 pdf 保存在 Angular 资产文件夹中?
- javascript - 获取子元素html的id
- powershell - 在 PowerShell Get-ChildItem -Exclude 不与 -Recurce 参数一起使用
- elasticsearch - 弹性搜索 403 错误
- c# - IHostedService/BackgroundService 按计划运行(相对于 Task.Delay)