如何将延迟在WPF做一个手术前(How to put delay before doing an o

2019-07-23 01:52发布

我尝试使用下面的代码浏览到下一个窗口前进行2秒延时。 但该线程调用第一和文本块被显示微秒,并降落到下一个页面。 我听到一个调度会做到这一点。

这里是我的代码片段:

tbkLabel.Text = "two mins delay";
Thread.Sleep(2000);
Page2 _page2 = new Page2();
_page2.Show();

Answer 1:

到了Thread.Sleep呼叫阻塞UI线程。 你需要异步等待。

方法1:使用DispatcherTimer

tbkLabel.Text = "two seconds delay";

var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) };
timer.Start();
timer.Tick += (sender, args) =>
    {
        timer.Stop();
        var page = new Page2();
        page.Show();
    };

方法2:使用Task.Delay

tbkLabel.Text = "two seconds delay";

Task.Delay(2000).ContinueWith(_ => 
   { 
     var page = new Page2();
     page.Show();
   }
);

方法3:在.NET 4.5的方式,使用异步/ AWAIT

// we need to add the async keyword to the method signature
public async void TheEnclosingMethod()
{
    tbkLabel.Text = "two seconds delay";

    await Task.Delay(2000);
    var page = new Page2();
    page.Show();
}


文章来源: How to put delay before doing an operation in WPF