我试图使用下面的代码在导航到下一个窗口之前做出2秒的延迟。但线程首先调用,文本块显示一微秒,然后进入下一页。我听说调度员会这样做。如何在WPF中执行操作之前放置延迟
这里是我的代码片段:
tbkLabel.Text = "two mins delay";
Thread.Sleep(2000);
Page2 _page2 = new Page2();
_page2.Show();
我试图使用下面的代码在导航到下一个窗口之前做出2秒的延迟。但线程首先调用,文本块显示一微秒,然后进入下一页。我听说调度员会这样做。如何在WPF中执行操作之前放置延迟
这里是我的代码片段:
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方式,使用异步/等待
// 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();
}
为什么“两分钟**延迟?” – 2016-01-05 06:59:04