1

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 秒。

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

4

2 回答 2

1

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

 Console.Clear()

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

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

于 2016-03-18T19:05:43.777 回答
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
于 2016-03-18T20:05:10.587 回答