Подождите, установите время для пользовательского ввода консольного приложения C # - PullRequest
4 голосов
/ 26 апреля 2010

Для консольного приложения мне нужно знать, как ждать в установленное количество времени (около 10 секунд), чтобы пользователь мог ввести клавишу или набор клавиш, прежде чем переходить к части «автозапуска» приложения .

Это меня беспокоит, потому что я не могу понять, как работает таймер, или threading.sleep, что мне использовать? Погуглил весь день.

некоторый псевдокод:

1.app открывается

2.app ждет 10 секунд, пока пользователь нажмет клавишу «k».

3.Если пользователь нажимает k, переходите к 4., если пользователь этого не делает, переходите к 5.

4. запустить функцию (открыть форму)

5. запустить функцию (сделать что-то)

Бьюсь об заклад, все просто, я просто не понимаю, что происходит.

Ответы [ 5 ]

9 голосов
/ 27 апреля 2010

Вот пример кода для консольного приложения C #. Он не использует таймер, вместо этого он использует сон. Это может быть немного проще для понимания, чем код на основе таймера.

        static void openForm()
        {
            Console.WriteLine("Form opened!");
        }

        static void doSomething()
        {
            Console.WriteLine("Do something!");
        }

        static void Main(string[] args)
        {
            bool optionForm = false;
            int seconds = 1;

            Console.Write("Press 'k' to open form");

            while (true)
            {                
                if (Console.KeyAvailable)
                {
                    ConsoleKeyInfo c = Console.ReadKey(true);
                    if (c.Key == ConsoleKey.K)
                    {                        
                        optionForm = true;
                        break;
                    }
                }

                System.Threading.Thread.Sleep(1000);

                if (seconds++ > 10)
                    break;

                Console.Write('.');
            }

            Console.WriteLine();

            if (optionForm)
                openForm();
            else
                doSomething();

            Console.ReadKey();
        }
4 голосов
/ 26 апреля 2010

Отключение 10-секундного таймера.

Запустить событие по истечении таймера.

В обработчике событий перейдите к разделу «Автозапуск».

Если пользователь нажимает клавишу до истечения времени таймера, убить поток.

Страница класса Timer на MSDN содержит пример таймера, ожидающего установленного периода.

1 голос
/ 11 февраля 2011

Спасибо, Марлон! Это мне очень помогло ..

Я использовал следующий код:

int minutes = 1;
while (true)
{
   if (Console.KeyAvailable)
   {
        ConsoleKeyInfo c = Console.ReadKey(true);
    if (c.Key == ConsoleKey.Enter)
    {
            break;
    }
   }
   Thread.Sleep(1000);
   if (minutes++ > 10)
   {
    throw;
   }
}
1 голос
/ 26 апреля 2010

Возможные ответы здесь , если вы используете консольное приложение.

0 голосов
/ 26 апреля 2010

Вот код, который тоже поможет вам.

        Form1 f = new Form1();
        System.Threading.Timer t = new System.Threading.Timer(o => f.Invoke(new Action(() => f.textBox1.Enabled = true)), null, 10000, System.Threading.Timeout.Infinite);
        f.ShowDialog();
        t.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
...