Как разорвать петлю с пользовательским вводом? - PullRequest
0 голосов
/ 04 июня 2018

Я хочу прервать или приостановить цикл do/while, если пользователь нажимает клавишу на консоли.Я пробовал ReadLine или ReadKey, но затем моя программа останавливается и ожидает ввода, но я хочу, чтобы моя программа остановилась только после ввода пользователя.

Мой код:

do
{   
    //do some code until user input
    Console.WriteLine("for settings: Press 's'");

    ConsoleKeyInfo cki;
    cki = Console.ReadKey();    // here the program stops and waits for input but I don't want it
    if (cki.Key.ToString() == "S")
    {
        Console.WriteLine("SETTINGS");
    }
} while (true);

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Check Console.KeyAvailable это будет верно, когда пользователь нажимает клавишу.Когда это правда, тогда вы можете сделать Console.ReadKey()

0 голосов
/ 04 июня 2018

Вы не сможете сделать так, чтобы ваша программа делала это легко, то есть фактически выполняет 2 действия одновременно: 1) ожидание ввода (что делает readline / readkey) и 2) продолжение работы одновременно.

Вы могли бы сделать это с многопоточностью, запустив выполнение вашей логики для одной угрозы и ожидание пользовательского ввода в другом потоке, а затем обмен данными между потоками, когда пользовательский ввод происходит, но, исходя из вашего вопроса, это, вероятно, слишком сложный ответ,Я с удовольствием напишу образец, но думаю, что это скорее сбивает с толку, чем помогает.

...