我試圖使用下面的代碼在導航到下一個窗口之前做出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