web-dev-qa-db-fra.com

Comment mettre du retard avant de faire une opération dans WPF

J'ai essayé d'utiliser le code ci-dessous pour faire un délai de 2 secondes avant de naviguer vers la fenêtre suivante. Mais le thread invoque en premier et le bloc de texte s'affiche pendant une microseconde et atterrit sur la page suivante. J'ai entendu dire qu'un répartiteur ferait cela.

Voici mon extrait:

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

L'appel à Thread.Sleep bloque le thread d'interface utilisateur. Vous devez attendre de manière asynchrone.

Méthode 1: utilisez un 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();
    };

Méthode 2: utilisez Task.Delay

tbkLabel.Text = "two seconds delay";

Task.Delay(2000).ContinueWith(_ => 
   { 
     var page = new Page2();
     page.Show();
   }
);

Méthode 3: la manière .NET 4.5, utilisez async/wait

// 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();
}
76
Phil