在控制台应用程序的文本输出期间对keypress做出反应

时间:2016-10-09 13:06:27

标签: c# console keyboard

我正在用c#写一篇文字冒险作为学校作业,我已经遇到了一个问题。

我做了一个函数来输出这样的句子:

public static void Zin (string zin)
    {

        foreach (char c in zin)
        {
            Console.Write(c);
            Thread.Sleep(50);
        }

现在这样可行,但我想实现当玩家点击回车键时,会立即在控制台上输入句子。

我不知道该怎么做。我已经尝试在foreach循环中使用while循环来检查输入是否被击中然后打印出句子但是这不起作用。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用Console.KeyAvailable属性来确定是否已按下了未通过任何Console.Read*方法读取的键。

按下键时,跳过循环中的等待。在循环之后,读取循环期间已按下的所有键,以便稍后使用Console.Read*时不会返回它们。

public static void Zin(string zin)
{
     foreach (char c in zin)
     {
          Console.Write(c);

          // Only wait when no key has been pressed
          if (!Console.KeyAvailable)
          {
               Thread.Sleep(50);
          }
     }

     // When keys have been pressed during our string output, read all of them, so they are not used for the following input
     while (Console.KeyAvailable)
     {
          Console.ReadKey(true);
     }
}

另见Listen for key press in .NET console app