Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中执行操作之前设置延迟_C#_Wpf_Dispatcher_Thread Sleep - Fatal编程技术网

C# 如何在WPF中执行操作之前设置延迟

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 =

在导航到下一个窗口之前,我尝试使用下面的代码进行2秒的延迟。但是线程首先调用,textblock会显示一微秒,然后进入下一页。我听说调度员会这么做

以下是我的片段:

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()
?为什么要“延迟两分钟?”