C# 如何在WPF中执行操作之前设置延迟
在导航到下一个窗口之前,我尝试使用下面的代码进行2秒的延迟。但是线程首先调用,textblock会显示一微秒,然后进入下一页。我听说调度员会这么做 以下是我的片段:C# 如何在WPF中执行操作之前设置延迟,c#,wpf,dispatcher,thread-sleep,C#,Wpf,Dispatcher,Thread Sleep,在导航到下一个窗口之前,我尝试使用下面的代码进行2秒的延迟。但是线程首先调用,textblock会显示一微秒,然后进入下一页。我听说调度员会这么做 以下是我的片段: tbkLabel.Text = "two mins delay"; Thread.Sleep(2000); Page2 _page2 = new Page2(); _page2.Show(); 对Thread.Sleep的调用正在阻止UI线程。您需要异步等待 方法1:使用Dispatchermer tbkLabel.Text =
tbkLabel.Text = "two mins delay";
Thread.Sleep(2000);
Page2 _page2 = new Page2();
_page2.Show();
对Thread.Sleep的调用正在阻止UI线程。您需要异步等待 方法1:使用Dispatchermer
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:使用任务延迟
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();
}
方法1可能会多次显示新页面,以防计时器多次滴答作响,而应用程序处理第一个页面的速度太慢。@usr实际上不会。在内部,计时器是单次触发的,在触发滴答声事件后会重新启动。我还发现,这也是一样的:tbkLabel.Text=“两分钟释放”;Dispatcher.Invoke(新操作(()=>Thread.Sleep(2000)),DispatcherPriority.Background);Page2_Page2=新的Page2()_page2.Show();请注意,
Task.Delay()
不幸也是一种.NET 4.5方法。您不需要在方法2中调度page.show()
?为什么要“延迟两分钟?”