在等待响应时尝试在循环中使用延迟

时间:2018-06-22 11:47:58

标签: c# while-loop timer sleep

我是C#的新手,在开始学习更多技术之前,已经开始在控制台中创建一个基于文本的小游戏。在我的开始菜单上,我正在寻找一个简单的浮华'Press Enter to continue',它会不断循环打开和关闭,直到用户按下Enter键为止。

while (!enter)
{
    WhiteText();
    Console.SetCursorPosition(47, 15);
    Console.WriteLine("[Press 'Enter' to start game]");
    System.Threading.Thread.Sleep(2000);
    BlackText();
    Console.SetCursorPosition(47, 15);
    Console.WriteLine("[Press 'Enter' to start game]");
    System.Threading.Thread.Sleep(1000);
}

基本上,我希望在检查用户是否实际按Enter时重复该操作。我在ConsoleKeyInfo input = Console.ReadKey();中使用了if语句,然后检查它们是否按了回车键。我的问题是我似乎无法让两者同时运行。在控制台中甚至可以做到这一点。

我真的希望我能以我有限的知识弄清楚这一点,对此将提供任何帮助或见解。

1 个答案:

答案 0 :(得分:0)

可以在读取密钥之前使用Console.KeyAvailable。 但是,当用户按下Enter键时,仅在Thread.Sleep结束之后才处理输入。因此对用户来说会很慢

bool show = true;
while (true)
{
    if (Console.KeyAvailable)
    {
        ConsoleKeyInfo key = Console.ReadKey(true);
        if (key.Key == ConsoleKey.Enter)
            break;
    }

    Console.ForegroundColor = show ? ConsoleColor.White : ConsoleColor.Black;

    Console.SetCursorPosition(47, 15);
    Console.WriteLine("[Press 'Enter' to start game]");
    System.Threading.Thread.Sleep(show ? 2000 : 1000);
    show = !show;
}