如何在WPF中执行操作之前放置延迟

我尝试使用以下代码在导航到下一个窗口之前延迟2秒。 但线程首先调用,文本块显示一微秒,然后进入下一页。 我听说调度员会这样做。

这是我的片段:

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

对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方式,使用async / 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(); }