Проверка, нажата ли какая-либо клавиша в консольном приложении 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
.