2017-05-03 96 views
0

我正在编写一个控制台应用程序witch在控制台屏幕上显示某些数据,而不是从键盘检查用户输入并最终按需处理它。所有单线程。在C#控制台应用程序中使用Keyboard.IsKeyDown

为此,我尝试从System.Windows.Input命名空间使用Keyboard.IsKeyDown方法。和视觉工作室wo'nt允许它。 有谁知道为什么,可以帮助我吗? 我没有看到其他方式实现该逻辑使用只有一个线程和没有计时器。

+3

在控制台应用程序中轮询键盘需要Console.KeyAvailable。 –

回答

2

使用Console.ReadKey()在控制台应用程序中读取来自键盘的输入。

请注意,这是一个阻塞呼叫。如果您不想阻止,请联系Console.KeyAvailable。例如,如果每10秒钟按一次按键,该程序将循环显示:

static void Main(string[] args) 
{ 
    do 
    { 
     if (Console.KeyAvailable) 
     { 
      var key = Console.ReadKey(); 
      Console.WriteLine(key.Key); 
     } 
     else 
     { 
      Console.WriteLine("No key pressed"); 
     } 
     System.Threading.Thread.Sleep(100); 
    } while (true); 
} 
+1

ReadKey是一个阻塞调用 - “ReadKey方法等待,即发出ReadKey方法的线程上的块,直到按下一个字符或功能键。” - 不要以为这就是OP想要的。 – stuartd

+1

正如问题评论中所建议的那样,如果与“Console.KeyAvailable”结合使用,就可以工作 - 就像[本文档示例](https://msdn.microsoft.com/en-us/library/471w8d85(v = vs.110).aspx) – stuartd

+0

好点。我已经更新了答案以反映这一点,并添加了一个示例。 –