2017-05-03 98 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

好點。我已經更新了答案以反映這一點,並添加了一個示例。 –