在Console.ReadKey()之前阻止在控制台中排队/预加载字符

时间:2016-03-18 18:51:45

标签: vb.net user-input console.readkey

在.NET中调用Console.ReadKey(true)时,它会从用户读取一个按键到控制台。我注意到在实际调用 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 个答案:

答案 0 :(得分:1)

  

清除控制台缓冲区和相应的显示控制台窗口   信息。

 Console.Clear()

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

如果这没有帮助,您需要记下该用户无法按下并且如果按下任何按钮或者在最后2-3秒按下按钮,则不会到达Console.WriteLine("Press any key now!")避免快速攻丝。

答案 1 :(得分:1)

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

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