c# wpf dispatcher thread-sleep

c# - Cómo poner un retraso antes de hacer una operación en WPF



dispatcher thread-sleep (1)

Intenté usar el siguiente código para hacer una demora de 2 segundos antes de navegar a la siguiente ventana. Pero el hilo invoca primero y el bloque de texto se muestra durante un microsegundo y aterriza en la página siguiente. Oí que un despachador haría eso.

Aquí está mi fragmento:

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


La llamada a Thread.Sleep está bloqueando el hilo de la interfaz de usuario. Tienes que esperar asincrónicamente.

Método 1: utilizar 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étodo 2: utilizar Task.Delay

tbkLabel.Text = "two seconds delay"; Task.Delay(2000).ContinueWith(_ => { var page = new Page2(); page.Show(); } );

Método 3: La forma .NET 4.5, use 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(); }