2011-11-28 72 views
3

我想編寫一個循環來收集按鍵(從鍵盤)並每秒執行一次動作。會有從鍵盤讀了一些辦法:如何在時間流逝時收集按鍵?

whenever (Console.KeyPressed != null) { 
    input_buffer.Add(Console.KeyPressed); 
} 

而且會有一些循環發生:

while (!done) { 
    if (input_buffer.NotEmpty()) { do_stuff(input_buffer.Pop()); } 
    do_other_stuff(); 
    wait(0.5 seconds); 
} 

因此,如果用戶按下一個鍵,它就會在下次更新中解決。如果他們不按下按鍵,則無論如何會發生下一次更新。

+0

您是否想要在應用程序或所有Windows中捕獲鍵盤事件? –

+0

@JoshSmeaton,只是從這個應用程序。 – Joe

+0

@Joe你對我的回答有什麼想法?你不在.Net 4上? –

回答

2

如果你使用.Net 4,你可以使用下面的代碼。它使用ConcurrentQueue來存儲按鍵信號,ManualResetEventSlim用於信令,而Task來自任務並行庫,用於異步運行兩個代碼部分。