Проверка, нажата ли какая-либо клавиша в консольном приложении C#

мне нужно проверить, нажата ли какая-либо клавиша в консольном приложении. Клавиша может быть любой клавишей на клавиатуре. Что-то вроде:

if(keypressed)
{ 

//Cleanup the resources used

}

Я придумал это:

ConsoleKeyInfo cki;
cki=Console.ReadKey();

if(cki.Equals(cki))
Console.WriteLine("key pressed");

Он хорошо работает со всеми клавишами, кроме клавиш-модификаторов - как я могу проверить эти клавиши?

2 ответов


это может помочь вам:

Console.WriteLine("Press any key to stop");
do {
    while (! Console.KeyAvailable) {
        // Do something
   }       
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);

если вы хотите использовать его в if, вы можете попробовать это:

ConsoleKeyInfo cki;
while (true)
{
   cki = Console.ReadKey();
   if (cki.Key == ConsoleKey.Escape)
     break;
}

для любого ключа очень простой: удалить if.


As @DawidFerenczy сказал, что мы должны отметить, что Console.ReadKey() блокирует. Он останавливает выполнение и ждет, пока не будет нажата клавиша. В зависимости от контекста, это может (не) быть удобно.

Если вам нужно, чтобы не блокировать выполнение всего теста Console.KeyAvailable. Оно будет contain true если клавиша была нажата, в противном случае false.


посмотреть Console.KeyAvailible если вы хотите nonblocking.

do {
    Console.WriteLine("\nPress a key to display; press the 'x' key to quit.");

// Your code could perform some useful task in the following loop. However, 
// for the sake of this example we'll merely pause for a quarter second.

    while (Console.KeyAvailable == false)
        Thread.Sleep(250); // Loop until input is entered.
    cki = Console.ReadKey(true);
    Console.WriteLine("You pressed the '{0}' key.", cki.Key);
    } while(cki.Key != ConsoleKey.X);
}

Если вы хотите заблокировать, используйте Console.ReadKey.