我尝试使用下面的代码浏览到下一个窗口前进行2秒延时。 但该线程调用第一和文本块被显示微秒,并降落到下一个页面。 我听到一个调度会做到这一点。
这里是我的代码片段:
tbkLabel.Text = "two mins delay";
Thread.Sleep(2000);
Page2 _page2 = new Page2();
_page2.Show();
我尝试使用下面的代码浏览到下一个窗口前进行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的方式,使用异步/ 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();
}