ReadKey нажимает символы до истечения времени ожидания потока - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь сделать свою первую игру на C # для консоли. Я создал центрированное кредитное вступление с надписью «нажмите любую клавишу, чтобы продолжить ...» в конце. Я использовал Console.ReadKey() для эмуляции паузы, пока она ждет ввода пользователя. Проблема в том, что вы можете «складывать» входы, возможно, есть более подходящий термин, но, по сути, в то время как консоль находится в состоянии тайм-аута, ключевые входы все еще читаются и ставятся в очередь до истечения времени ожидания. например;

//10 second wait
//this is where I would press a key
Thread.Sleep(10000);
char x = Console.ReadKey().KeyChar;
//x will be equal to whatever key I pressed before the timeout

это не та функциональность, которой я занимаюсь. есть ли у кого-нибудь решение этого вопроса, например;не используйте Thread.Sleep() или Console.ReadKey()

Если вы все еще не поняли вопрос, нажмите клавишу, пока действует Thread.Sleep(), и клавиша чтения по истечении времени напечатает этот символ. Кто-нибудь знает, как остановить чтение ключа?

Если вам нужен реальный код проекта, просто спросите. Хотя я считаю это неуместным для этого вопроса.

1 Ответ

1 голос
/ 05 ноября 2019

Если вы хотите очистить буфер перед ожиданием ключа, вы можете вызвать Console.ReadKey(true) в цикле до тех пор, пока существует KeyAvailable. Передача true методу указывает, что ключ должен быть перехвачен и не выводиться в окно консоли.

Например:

Thread.Sleep(TimeSpan.FromSeconds(10));

// Clear buffer by "throwing away" any keys that were pressed while we were sleeping
while(Console.KeyAvailable) Console.ReadKey(true);

char x = Console.ReadKey().KeyChar;
...