Как поместить задержку перед выполнением операции в WPF - программирование
Подтвердить что ты не робот

Как поместить задержку перед выполнением операции в WPF

Я попытался использовать приведенный ниже код, чтобы сделать 2-секундную задержку, прежде чем перейти к следующему окну. Но сначала этот поток вызывает, а текстовый блок отображается на микросекунду и попадает на следующую страницу. Я слышал, что диспетчер сделает это.

Вот мой фрагмент:

tbkLabel.Text = "two mins delay";
Thread.Sleep(2000);
Page2 _page2 = new Page2();
_page2.Show();
4b9b3361

Ответ 1

Вызов Thread.Sleep блокирует поток пользовательского интерфейса. Вы должны ждать асинхронно.

Способ 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();
}