首页 > 解决方案 > 如何在不使用 Thread.Sleep() 的情况下暂停执行

问题描述

我有几行代码,例如:

MessageBox.Show("1");

Sleep(1000);

MessageBox.Show("2");

Sleep(1000);

MessageBox.Show("3");

我想暂停 1 秒,然后继续下一个代码行而不使用Thread.Sleep; 因为它冻结了整个表单并终止了应该在睡眠代码之前执行的代码行。我不为此使用消息框,我仅用于一个示例,我知道它可以与那些一起使用。

对于我最初使用的线路,它不起作用。在继续运行代码之前是否有其他选择可以等待 1 秒?谢谢。

标签: c#winformswait

解决方案


是的,使您的方法异步并使用 await Task.Delay(1000)

public async Task MyAsyncMethod()
{
    //Action 1  
    await Task.Delay(1000);

    //Action 2  
    await Task.Delay(1000);


    //Action 3  
    await Task.Delay(1000);
}

编辑:

如果使用 Winforms,则此异步模式必须转到层次结构中的最高方法。因此,假设您确实有一个要在其中调用此方法的按钮单击事件。然后你必须使点击方法异步!

private async void button2_Click(object sender, EventArgs e)
{
    Console.WriteLine("STUFF Before");
    await MyAsyncMethod();
    Console.WriteLine("STUFF @ the END");
}

public async Task MyAsyncMethod()
{
    //Action 1  
    Console.WriteLine("Action 1 ");
    await Task.Delay(1000);

    //Action 2  
    Console.WriteLine("Action 2 ");
    await Task.Delay(1000);


    //Action 3  
    Console.WriteLine("Action 3 ");
    await Task.Delay(1000);
}

要实现这一点,您需要声明MyAsyncMethodas的返回类型Task

public async Task MyAsyncMethod()    
               ^
               !

推荐阅读