在C#中没有办法等待?

时间:2016-12-14 01:29:33

标签: c# wait

有一个命令通常会使程序等待。现在我知道如何使程序等待同时冻结所有输入,但这不是我想要实现的目标。我正在创建一个简单的Windows控制台应用程序,只是为了启动我的事情。

     String name;
        Console.WriteLine("What is your name?");
        name = Console.ReadLine();
        Console.WriteLine("Hello, {0}", name);

现在我想让它等待,同时也允许任何输入,这样我就可以运行其他东西,但也可以让它实际上让它说Hello, (Insert Name Here)

另外,如前所述我非常新,请尝试解释您的答案,谢谢!

2 个答案:

答案 0 :(得分:0)

在您正在使用的ReadLine之外等待用户输入,Thread.Sleep如下所示是停止应用程序X时间等待执行完成或用户准备就绪的一种基本方法。 Thread.Sleep在更复杂的应用程序中阻止执行:

Thread.Sleep(2000);

进入高级方法,您可以使用异步编程概念并使用Task.Delay。这不会阻塞类似睡眠的线程,这意味着您可以使用异步编程模型使用单个线程执行此操作。这个示例代码创建了一个新方法,说它是异步并将其定义为一个任务,它基本上是一个工作单元,同样是更高级的概念明智,但只是为了给你一个高层次的想法/概述。

async Task TaskDelay()
{
    await Task.Delay(2000);
} 

private async void Test()  
{
    // Console.WriteLine etc. etc

    await PutTaskDelay();
    MessageBox.Show("Hello, I'm done waiting.");
}

答案 1 :(得分:-1)

我相信问题是:

如何在主线程中等待用户输入,同时在后台处理其他任务?

class Program
{
    static void Main(string[] args)
    {
        AsynchronousTask();
        Console.WriteLine("What is your name?");
        var name = Console.ReadLine();
        Console.WriteLine("Hello, {0}", name);
        Console.ReadLine();
    }

    private static async void AsynchronousTask()
    {
        Task.Run(() =>
        {
            while (true)
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("Async tas is running in the background.");
                Console.ForegroundColor = ConsoleColor.White;
                Thread.Sleep(1000); //this is just to slowdown background thread
            }
        });
    }
}

虽然这个例子非常基础,但它展示了如何在后台运行一些代码。您可能希望探索的主题称为Asynchronous Programing