【问题标题】:Is there no way to Wait in C#?有没有办法在 C# 中等待?
【发布时间】:2016-12-14 01:29:33
【问题描述】:

有一个命令通常会让程序等待。现在我知道如何在冻结所有输入的同时让程序等待,但这不是我想要实现的。我正在制作一个简单的 Windows 控制台应用程序,只是为了让我开始做事。

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

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

另外,如前所述,我是新手,请尝试解释您的答案涉及什么,谢谢!

【问题讨论】:

  • Console.ReadLine() 等着你。不幸的是,我不确定你在寻找什么。
  • 是的,检查这个链接有人在stackoverflow.com/questions/9241025/…之前问过同样的问题
  • 如果您以广泛的视角和不同的语言询问“等待”概念,在控制台用户输入的上下文中等待不符合典型含义。通常在线程、同步等方面的“等待”概念。

标签: c# wait


【解决方案1】:

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

Thread.Sleep(2000);

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

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

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

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

【讨论】:

  • 我没有进入最佳实践讨论,这只是一个简单的例子,他可以在非常有限的背景下理解。就目前而言,它可以工作,并且可以用于扩展示例,而无需太深入主题。我认为您在语义上过度扩展了自己。
  • async Task很容易,为什么不直接做呢?
【解决方案2】:

我认为问题是:

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

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

【讨论】:

  • @Nkosi 是的,它可以,但这与我发布的代码有什么关系?
猜你喜欢
  • 2019-08-19
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多