@AAGR
Занимаюсь программированиям

Как запрашивать клавишу во время виполнения цикла (Console.ReadKey)?

Есть собственно цикл, во время которого я например могу нажать Esc и программа закроется я знаю как это сделать. Но тогда цикл прерывается и ждет нажатия клавиши, а мне надо без прерывания цикла, в фоновом режиме. Как это сделать ?

Могу дать пример если кто не понял

for(int i = 0 ; i < 10 ; i++)
{
    ConsoleKeyInfo press = Console.ReadKey();
    if (press.Key == ConsoleKey.Escape)
                    break;
    Console.WriteLine(i);
}
  • Вопрос задан
  • 897 просмотров
Решения вопроса 1
@cicatrix
было бы большой ошибкой думать
Ожидай нажатие в другом потоке
class Program
{
    static volatile bool exit = false;
    static void Main(string[] args)
    {
        Console.WriteLine("ESC - выход");
        Task.Factory.StartNew(() =>
        {
            while (Console.ReadKey().Key != ConsoleKey.Escape) ;
            exit = true;
        }); // ожидание нажатия в другом потоке

        while (!exit) // долгий цикл
        {
            // выполнение долгой операции
        } // while
    } // Main
} // class Program
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@KACTEH
Вот вариант попроще, без других потоков
do
{                
    Console.WriteLine("Press 'x' to stop!");
    Thread.Sleep(10);
    Console.Clear();
} while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.X));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы