Console.ReadKey(true)需要按两次键才能显示一个输入

时间:2019-06-24 23:13:11

标签: c# .net-core console-application

我正在使用两个线程。一种用于显示一些信息。另一个用于输入处理。目前,我必须输入两次击键才能将其添加到输入中。

完成按键后,我已经尝试锁定输入,但这并不能解决问题。

empty

我想要的是:一个字符只需输入一个键即可。

反而会发生什么:我需要按两次键以将其添加到输入字符串中。

运行此代码时,不会显示错误消息。

1 个答案:

答案 0 :(得分:1)

  

我想要的是:一个字符只需输入一个键即可。

     

反而会发生什么:我需要按两次键以将其添加到输入字符串中。

您需要按两次键,因为您的循环在接受输入之前会先读取两次键。实际上,实际上被视为真实输入的唯一按键是第二次按键。第一个可以是除Backspace键之外的任何内容。

代替读取密钥两次,只需使用包含已读取原始密钥的key变量:

void DetailMenuInput()
{
    while (true)
    {
        Console.TreatControlCAsInput = false;
        var key = Console.ReadKey(true);
        if (key.Key == ConsoleKey.Backspace)
        {
            if (input.Length > 0)
                input = input.Remove(input.Length - 1);
            continue;
        }
        input += key.KeyChar.ToString();
    }
}