次のウィンドウに移動する前に、次のコードを使用して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();
}