等待用户输入 C# 控制台应用程序的设置时间

发布于 2024-08-30 11:14:18 字数 326 浏览 5 评论 0原文

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

这让我很困扰,因为我不太清楚计时器是如何工作的,或者 threading.sleep,我应该使用什么?一整天都在谷歌搜索。

一些伪代码:

1.app 打开

2.app 等待 10 秒用户按下“k”键。

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

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

5.运行一个函数(做某事)

我打赌它很简单,我只是不明白这是怎么回事。

For a Console app, I need to know how to wait at set amount of time (about 10 seconds), for a user to input a key or set of keys, before proceeding with an 'auto run' portion of the application.

This is bugging me because I can't quite figure out how the timer works, or threading.sleep, what should I use? Been googling all day.

some psuedocode:

1.app opens

2.app waits 10 secs for user to hit the "k" key.

3.if user hits k, go to 4. if user does not, go to 5.

4.run a function(open a form)

5.run a function(do something)

I bet its simple, I just don't understand whats going on.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

懵少女 2024-09-06 11:14:18

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

Here's some sample code for a C# console application. It doesn't use a timer, instead it uses Sleep. It may be a bit easier to understand than timer based code.

        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();
        }
晨曦÷微暖 2024-09-06 11:14:18

关闭 10 秒计时器。

当计时器到期时触发事件。

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

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

Timer 类页面 MSDN 上有一个计时器等待设定时间的示例。

Set a 10 second timer off.

Fire an event when the timer expires.

In the event handler proceed with the "auto run" section.

If the user hits a key before the timer expires, kill the thread.

The Timer class page on MSDN has an example of a timer waiting for a set period.

千里故人稀 2024-09-06 11:14:18

谢谢马龙!!它确实对我有很大帮助..

我使用了以下代码:

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

Thanks Marlon!! It really helped me a lot..

I used following code:

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;
   }
}
送你一个梦 2024-09-06 11:14:18

这里有一些代码也可以帮助你。

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

Here is some code that will do the trick for you too.

        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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文