【问题标题】:React to keypress during text output in Console application在控制台应用程序中的文本输出期间对按键做出反应
【发布时间】:2016-10-09 13:06:27
【问题描述】:

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

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

public static void Zin (string zin)
    {

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

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

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

提前致谢!

【问题讨论】:

    标签: c# console keyboard


    【解决方案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

    【讨论】:

    • 首先感谢您的回答!但是,它似乎还不起作用。 Console.KeyAvailable 函数究竟是做什么的?
    • 什么不起作用?我已经在代码中对此进行了测试。答案包含指向 Console.KeyAvailable 文档的链接。只需单击文本即可转到文档。
    • 嗯,在我的代码中,当我按下“回车”键时没有任何反应。控制台只是继续一个字母一个字母地写句子
    • 您是否从我的答案中复制了 Zin() 方法 1 到 1 或修改了什么?您是否确定代码在进行更改后已编译?
    • 哦,等等,我把 while 循环放在了 foreach 循环中,这显然是行不通的 ;) 非常感谢!我其实也明白你做了什么!
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 2017-02-25
    • 1970-01-01
    • 2011-07-26
    • 2010-12-22
    • 2012-07-30
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多