Запрет очереди / предварительной загрузки символа в консоли перед Console.ReadKey()

Когда Console.ReadKey(true) вызывается в.NET, он читает одно нажатие клавиши от пользователя в консоль. Я заметил, что персонаж может быть напечатан раньше Console.ReadKey() на самом деле вызывается, позволяя пользователю предварительно загрузить символьное нажатие перед приглашением. Я ищу способ не допустить этого.

Вот пример кода, чтобы лучше объяснить:

'Code runs a loop for a few seconds'
'...'

'At this point, a user can preload a key press'

Console.WriteLine("Press any key now!")

Dim startTime As DateTimeOffset = DateTimeOffset.Now()
Console.ReadKey(True) 'The console should only look for a keypress at THIS point'
Dim endTime As DateTimeOffset = DateTimeOffset.Now()

Dim miliseconds As Integer = (endTime.Subtract(startTime).TotalMilliseconds)
Dim seconds As Double = (endTime.Subtract(startTime).TotalSeconds)
Console.Clear()
Console.WriteLine("You took {0} miliseconds or {1} second(s).", miliseconds, seconds)

Если пользователь нажимает клавишу до Console.ReadKey()программа-образец вернет:

Вы взяли 0 миллисекунд или 0 секунд.

Есть ли известный способ предотвратить такое поведение? Эта проблема возникает в других типах консольных программ, где пользователю предлагается ввести определенный ключ. Если клавиша нажата раньше, иногда пользователь даже не увидит подсказку.

2 ответа

Решение

Ниже код может помочь вам.. с тестовым примером..

Private Shared Sub Main(args As String())

    'System.Threading.Thread.Sleep(4000)

    'rejecting old key presses
    While Console.KeyAvailable
        Console.ReadKey()
    End While

    Console.ReadKey()
End Sub

Очищает буфер консоли и соответствующее окно консоли для отображения информации.

Положил

 Console.Clear()

до

Console.WriteLine("Press any key now!")

Если это не поможет, вам нужно отметить, что этот пользователь не может допечатывать и не может Console.WriteLine("Press any key now!") если нажата какая-либо кнопка или она была нажата в течение последних 2-3 секунд, чтобы избежать быстрого нажатия.

Другие вопросы по тегам