未触发Console.KeyAvailable

时间:2017-11-01 13:12:36

标签: c# console

我想检测是否有任何按键被按下,但据我所知,if语句没有被触发,否则程序会因Enviroment.Exit(0)而关闭。

public static int GameLoop()
        {
            while(true)
            {
                if(Console.KeyAvailable == true)
                {
                    Environment.Exit(0); //test to see if being used
                    Player.KeyPressed = Console.ReadKey().KeyChar;
                    Player.Movement();
                }
                Console.Clear();
                Console.SetCursorPosition(playerX, playerY);
                Console.Write(playerDirection);

                input = (char)Console.ReadKey().KeyChar;
正在调用

GameLoop(),因为正在执行Console.WriteLine("working")。关于为什么Console.KeyAvailable == true未能在关键媒体上得到满足的任何想法?谢谢!

Console.KeyAvailable MSDN

1 个答案:

答案 0 :(得分:1)

代码if(Console.KeyAvailable == true)永远不会被发现是真的,因为在几个刻度(非常短的时间内)中,正在读取密钥使其不可用input = (char)Console.ReadKey().KeyChar;

正如@Hans Passant所说:“在ReadKey()KeyAvailable电话之间按键的速度非常快”

基本上Console.KeyAvailable不应与Console.ReadKey位于同一方法或循环中。

因此,如果您想记录按下了哪个键,请从if语句中读取密钥,如下所示:

            if (Console.KeyAvailable == true)
            {
                Player.KeyPressed = Console.ReadKey().KeyChar;
                Player.Movement();
            }