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