我尝试使用下面的代码在导航到下一个窗口之前延迟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方式,使用异步/等待
// 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();
}

关于c# - 如何在WPF中进行操作之前进行延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15599884/

10-12 00:33