等待用户输入C#console app的设置时间

时间:2010-04-26 15:31:51

标签: c# user-input wait

对于控制台应用程序,我需要知道如何在设定的时间(大约10秒)内等待用户输入一个或一组键,然后继续执行应用程序的“自动运行”部分

这让我烦恼,因为我无法弄清楚计时器是如何工作的,或者是threadading.sleep,我应该使用什么?一整天都在谷歌搜索。

一些伪代码:

1.app打开

2.app等待10秒,以便用户点击“k”键。

3.如果用户点击k,则转到4.如果用户没有,请转到5.

4.运行一个函数(打开一个表单)

5.运行一个功能(做某事)

我打赌它很简单,我只是不明白发生了什么。

5 个答案:

答案 0 :(得分:9)

以下是C#控制台应用程序的一些示例代码。它不使用计时器,而是使用Sleep。它可能比基于计时器的代码更容易理解。

        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();
        }

答案 1 :(得分:4)

关闭10秒定时器。

计时器到期时触发事件。

在事件处理程序中继续“自动运行”部分。

如果用户在计时器到期之前点击某个键,则终止该线程。

MSDN上的Timer class page有一个等待设定时间的计时器示例。

答案 2 :(得分:1)

如果您正在使用控制台应用程序,可能的答案here

答案 3 :(得分:1)

谢谢马龙!这对我帮助很大..

我使用了以下代码:

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;
   }
}

答案 4 :(得分:0)

以下是一些可以帮你解决问题的代码。

        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);