2011-02-28 53 views
3

我的工作我的程序的一小部分,處理輸入,基本上我有這個小碼禁用在C#控制檯輸入:,直到某個任務完成

bool Done = false; 
while (!Done) 
{ 
    ConsoleKeyInfo key = Console.ReadKey(true); 
    if (key.Key == ConsoleKey.Enter) 
    { 
    //Action 
    } 
} 

與此主要問題是,該代碼甚至可以在操作之間處理ReadKey。

所以,如果你有一個菜單,你可以按鍵,然後它會說「你按下了:x」,如果你按下任何按鈕,當它顯示你這條消息時,ReadKey已經得到這個新的密鑰。

所以我想阻止任何進一步的輸入,直到用戶再次看到菜單。

回答

5

不確定這是否有意義,我個人喜歡它,當擊鍵不消失,我可以提前打字。但是你可以刷新鍵盤緩衝區這樣的:

while (!Done) 
{ 
    while (Console.KeyAvailable) Console.ReadKey(true); 
    ConsoleKeyInfo key = Console.ReadKey(true); 
    // etc.. 
} 
+0

正如我所說,它是一個像系統菜單。如果由於某種原因你按下輸入2次,那麼你會選擇你不想要的東西。我會檢查你寫的 – SaintHUN

+0

魔獸,完美的作品,謝謝:) – SaintHUN

0

您不能阻止輸入, 即使您不處理它,它也會進入鍵盤緩衝區。

你可以簡單地停止將它們從緩衝區中取出。

+0

或者你可以添加一個標誌來轉儲輸入,直到一定的時間(動作完成) – AbiusX

+0

我不知道你要我怎麼沒有讓他們走出緩衝區。有沒有辦法在讀取新密鑰之前轉儲ReadKey?如果標誌可以工作,那麼標誌可以工作,你能指出我在哪裏可以閱讀的地方嗎? – SaintHUN