在 Console.ReadKey() 之前阻止 queing/preloading 控制台中的字符

Preventing queing/preloading a character in the console before Console.ReadKey()

当在 .NET 中调用 Console.ReadKey(true) 时,它会将用户的单个按键读取到控制台中。我注意到可以在 before 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()之前按下一个键,示例程序将return:

You took 0 miliseconds or 0 second(s).

是否有已知的方法来防止这种行为?此问题出现在提示用户输入特定密钥的其他类型的控制台程序中。如果过早按下按键,有时用户甚至看不到提示。

Clears the console buffer and corresponding console window of display information.

 Console.Clear()

之前

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

如果这没有帮助,您需要注意如果按下任何按钮或在最后 2- 3 秒以避免快速敲击。

下面的代码可以帮助你..测试用例..

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