Console.ReadLine Break - PullRequest
       8

Console.ReadLine Break

3 голосов
/ 27 января 2011

Я пытаюсь выяснить, как я могу использовать Console.ReadLine и таймер.Моя консольная программа предназначена для автоматического запуска длительного процесса, причем этот процесс перезапускается каждые 30 секунд после завершения предыдущего процесса.Я хочу дать пользователю возможность прервать автоматический запуск, набрав хотя бы команду.Однако, если я использую Console.ReadLine (), он будет ждать, пока пользователь не введет что-то, тогда как я хочу, чтобы программа продолжала цикл, если ничего не вводится в течение 30 секунд.,,Есть мысли ??

Например:

RunProcess> Ожидание 30 секунд для ввода пользователя.Если нет: Continue Loop

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 27 января 2011

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

Не забудьте поточить: -)

EDIT:

Вы можете использовать System.Threading.Timer для отметки каждые 30 секунд, а в методе обратного вызова проверить, установлен ли текст.

2 голосов
/ 28 января 2011

Не используйте Console.ReadLine(), но проверьте, истинно ли Console.KeyAvailable, а затем прочитайте Console.ReadKey(), чтобы проверить условие выхода.

Попробуйте этот пример кода

class Program
{
    static bool done;
    static void Main(string[] args)
    {
        int count = 0;            
        done = false;
        while (!done)
        {
            Thread.Sleep(2000);
            count++;
            Console.WriteLine("Calculation #" + count.ToString());
            if (Console.KeyAvailable)
            {
                ConsoleKeyInfo key = Console.ReadKey();
                if (key.Key == ConsoleKey.Escape)
                {
                    done = true;
                }
            }                                
        }
        Console.WriteLine();
        Console.WriteLine("end");
    }
}
...