在执行控制台应用程序期间的任何时刻检测Shift键

时间:2010-05-27 18:24:57

标签: .net console-application

我想让我的控制台应用程序运行一段时间,如果在用户按下shift键的过程中任何时候,最后会给用户一些选项。这可能吗?

2 个答案:

答案 0 :(得分:2)

当然,在主线程中使用ReadKeyMSDN)轮询控制台输入时,在另一个线程中运行处理任务。

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
  }
}

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

答案 1 :(得分:2)

我将无限循环更改为查找在我的进程完成后设置的标志的循环。我还改变了Shift键的查找方式,因为它看起来不像Console.ReadKey()正在为Shift做任何事情。尽管如此,我还是会给Ron带来线程。这段代码测试好了:

  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