代码之家  ›  专栏  ›  技术社区  ›  adam0101

在控制台应用程序执行期间的任意点检测Shift键

  •  1
  • adam0101  · 技术社区  · 14 年前

    随时都可以 在此过程中,用户按下了shift键。这可能吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ron Warholic    14 年前

    ReadKey ( MSDN

    Thread thread = new Thread(() => DoWork());
    thread.Start();
    
    while (true) {
      Thread.Sleep(10);
      var keyInfo = Console.ReadKey();
    
      if ((keyInfo.Modifiers & ConsoleModifiers.Shift) != 0) {
        // take note of shift
      }
    }
    

    如果线程不是一个选项(它应该是),您将不得不定期中断您的处理,以检查密钥输入,或者您可以创建一个隐藏窗口,并通过该窗口处理密钥。

        2
  •  2
  •   Ron Warholic    14 年前

    我将无限循环更改为查找在进程完成后设置的标志的循环。我还改变了Shift键的查找方式,因为它看起来不像Console.ReadKey()在为Shift做任何事情。不过,我还是要感谢罗恩提出的问题。此代码测试正常:

      Dim thread As New System.Threading.Thread(AddressOf Generate)
      thread.Start()
    
      While _generating
       System.Threading.Thread.Sleep(10)
    
       If (System.Windows.Forms.Control.ModifierKeys And Windows.Forms.Keys.Shift) = Windows.Forms.Keys.Shift Then
        _showOptions = True
       End If
      End While