Запрет очереди / предварительной загрузки символа в консоли перед 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 секунд, чтобы избежать быстрого нажатия.