C# 立即检查按键(控制台应用程序)

C# Check for key press without delay (Console application)

第一次在这里发帖,所以如果我错过了重要的事情,请提前致歉,如果是这样的话,请告诉我!

我正在编写一个控制台应用程序,它有一个菜单,在不同的层次上有几个不同的选项,我正在尝试制作一个功能,当用户在这些菜单中工作时,随时注意是否Esc 键被按下。为了让我的代码不那么混乱,我写了一个单独的方法,当我要求输入时(比如选择,或将信息输入表单等),我可以在任何时候简单地调用它。 我遇到的问题是它总是取消第一次按键。如果用户输入要在菜单中移动的数字,则不会输入该数字,如果他们在表单中输入名称,则第一个字母会丢失等。 有解决办法吗?

代码目前看起来像这样;

public static void checkForEsc()
    {
        ConsoleKeyInfo key = Console.ReadKey(true);

        if (key.Key == ConsoleKey.Escape)
        {
            switch (currentUserisAdmin)
            {
                case true:
                    Menu.AdminMenu();
                    break;

                case false:
                    Menu.CustomerMenu();
                    break;
            }
        }
    }

提前致谢:)

编辑:

可能值得补充的是,调用此代码段的代码看起来像这样,变化非常小;

Console.WriteLine($"1. Add a user\n2. Remove a user \n3. See user info \n \n9. Cancel");
Program.checkForEsc();
int response2 = CheckIfResponseInt(Console.ReadLine());

您需要编写自己的行编辑器而不是使用 Readline。它在下面的 link 中进行了描述。您可能需要添加对其他控制键(例如退格键)的支持,或者添加检查是否仅按下数字键。