【问题标题】:VB.NET 2010 Console Application Wait for a key for 5 seconds, carry on if notVB.NET 2010 Console Application 等待一键5秒,若无则继续
【发布时间】:2017-06-12 19:36:03
【问题描述】:

好的,我尝试在几个 Google 网站上查找,但找不到 一个答案。

它在 VB.Net 中作为控制台应用程序,我想设置它的方式几乎就像进入 BIOS 一样,当你打开你的计算机时,你有几秒钟的时间来按下一个键,如果它没有按下它会跳过,这在带有计时器的 Windows 窗体应用程序中很容易,但我在控制台应用程序中很难做到这一点。

到目前为止的代码:

   Console.WriteLine("Welcome to console, press F2 for advanced options.")
    ''Console.ReadKey(keys.f2)
    ''Make it pause for 5 seconds, tried obvious threading,thread.sleep(5000) - that halts the application :/

是的,如果您理解我的意思并能够提供帮助,我们将不胜感激。似乎没有任何明显的计时器功能。我正在考虑使用一个缓慢增加到 100 的变量,并使用 thread.sleep,但我认为它获取密钥的机会很低,因为 .sleep 会停止应用程序。 也在考虑console.readkey,但不确定如何在等待过程中读取特定键。

【问题讨论】:

  • 它是另一种我无法转换的语言。
  • 向下滚动并在 VB.NET 和 C# 中查看答案将是一个小小的努力。
  • 将高尔夫编码为答案?

标签: vb.net timer console-application vb.net-2010 readkey


【解决方案1】:

使用 Do 循环、Console.KeyAvailable 和秒表

    Console.WriteLine("Welcome to console, press F2 for advanced options.")
    Dim stpw As Stopwatch = Stopwatch.StartNew
    Dim waitfor As New TimeSpan(0, 0, 5)
    Dim kp As ConsoleKeyInfo

    Do
        If Console.KeyAvailable Then
            kp = Console.ReadKey(True)
            If kp.Key = ConsoleKey.F2 Then
                Exit Do
            End If
        End If
        Threading.Thread.Sleep(100)
    Loop While stpw.Elapsed < waitfor

    If kp.Key = ConsoleKey.F2 Then
        Console.WriteLine("F2 press")
    Else
        Console.WriteLine("NO F2")
    End If

【讨论】:

  • 完美运行,我也想要它! :) 不知道秒表功能,即使经过一些研究。
  • 这称为忙等待,可以说是最糟糕的等待类型。代码高尔夫解决方案在等待输入时不会像预期的那样消耗处理器。
  • @GSerg - 是的。我修好了它。您可以发布未解开的高尔夫答案。
  • @DanielOakley - 注意添加睡眠
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2017-05-30
  • 2013-09-30
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多