如何在不使用睡眠的情况下在C#中执行短暂的延迟?

我是非常新的编程,而且我一直在学习足够好,我想,但是我仍然无法掌握一个延迟的想法.我正在做的是一种使用涉及作战系统的 Windows窗体应用程序的一种测试“游戏”.在其中,我想让一个NPC每隔几秒钟就做一个动作.问题是,我也想允许玩家在攻击之间进行交互. Thread.sleep对我来说真的不起作用,不仅因为我不知道如何多线程,而且每当我尝试运行它时,就像这样:

textBox1.Text += "\r\nThread Sleeps!";
 System.Threading.Thread.Sleep(4000);
 textBox1.Text += "\r\nThread awakens!";

似乎坚持先睡觉,然后打印两行.

我认为这是我现在可以说的,但是如果还是含糊不清,就有话可以告诉我.

简而言之,在C#中,我想在运行前做一些延迟,但同时仍然允许用户交互.

如果您使用的是.NET 4.5,则可以使用新的async / await框架进行睡眠而不锁定线程.

它的工作原理是使用async关键字标记需要异步操作的功能.这只是编译器的一个提示.然后,您可以在要使代码异步运行的行上使用await关键字,并且您的程序将在不锁定线程或UI的情况下等待.您调用的方法(在等待行上)也必须使用async关键字进行标记,通常以Async的形式命名,如ImportFilesAsync中所示.

您在示例中需要做的是:

>确保您的程序具有.Net Framework 4.5作为目标框架
>使用async关键字标记需要睡眠的功能(请参见下面的示例)
>使用System.Threading.Tasks添加;到你的代码

您的代码现在可以使用Task.Delay方法而不是System.Threading.Thread.Sleep方法(可以在Task.Delay上使用await,因为Task.Delay在其定义中标记为异步).

private async void button1_Click(object sender, EventArgs e)
    {
      textBox1.Text += "\r\nThread Sleeps!";
      await Task.Delay(3000);
      textBox1.Text += "\r\nThread awakens!";
    }

在这里您可以阅读更多关于Task.DelayAwait.

相关文章
相关标签/搜索