Console.ReadKey не надежный - PullRequest
       24

Console.ReadKey не надежный

0 голосов
/ 13 января 2019

У меня есть следующий код, который ожидает ввода пользователя с помощью клавиш со стрелками для перемещения или экранирования для завершения программы.

Console.WriteLine(startNode.Render(true));
LevelState currentNode = startNode;
while (Console.ReadKey(true).Key != ConsoleKey.Escape)
{
    if (Console.ReadKey(true).Key == ConsoleKey.UpArrow)
    {
        Console.WriteLine("up");
        LevelState move = currentNode.StepInDirection(CardinalDirection.Up);
        if (move != null)
        {
            currentNode = move;
            Console.WriteLine(currentNode.Render(true));
        }
    }
    //ditto for the other 3 directions
}

Однако, это только изредка подтверждает мой вклад. Например, если я быстро нажимаю клавишу выхода, в большинстве случаев ничего не происходит. Поэтому метод Console.ReadKey кажется мне крайне ненадежным. Что является лучшей альтернативой?

1 Ответ

0 голосов
/ 13 января 2019

Вы звоните ReadKey слишком много раз

Это лучший шаблон

ConsoleKey key;
while ((key = Console.ReadKey(true).Key) != ConsoleKey.Escape)
{
   if (key == ConsoleKey.UpArrow)
   {
      ///
   }
   //ditto for the other 3 directions

}

или

// read key once
ConsoleKey key = Console.ReadKey(true).Key;
while (key != ConsoleKey.Escape)
{
   if (key == ConsoleKey.UpArrow)
   {
      ///
   }

   //ditto for the other 3 directions
   key = Console.ReadKey(true).Key;
}
...