Quería hacer una simple aplicación de cuenta atrás con C# para mostrar como ejemplo.C# Cuenta atrás simple: ¿Qué estoy haciendo mal?
Para la primera y la versión básica utilizo una etiqueta para mostrar el tiempo actual que queda en segundos y un botón para iniciar la cuenta atrás. Click-del botón evento se lleva a cabo de esta manera:
private void ButtonStart_Click(object sender, RoutedEventArgs e)
{
_time = 60;
while (_time > 0)
{
_time--;
this.labelTime.Content = _time + "s";
System.Threading.Thread.Sleep(1000);
}
}
Ahora, cuando el usuario hace clic en el botón, el tiempo es en realidad la cuenta atrás (como las congelaciones de aplicación (debido a Sleep())) por la cantidad de tiempo elegido, pero el contexto de la etiqueta no se actualiza.
¿Estoy haciendo algo generalmente incorrecto (cuando se trata de subprocesos) o es solo un problema con la interfaz de usuario?
Gracias por sus respuestas! Ahora uso System.Windows.Threading.DispatcherTimer para hacer lo que me dijiste. Todo funciona bien por lo que esta pregunta se responde oficialmente;)
Para aquellos que estén interesados: Aquí está mi código (las partes esenciales)
public partial class WindowCountdown : Window
{
private int _time;
private DispatcherTimer _countdownTimer;
public WindowCountdown()
{
InitializeComponent();
_countdownTimer = new DispatcherTimer();
_countdownTimer.Interval = new TimeSpan(0,0,1);
_countdownTimer.Tick += new EventHandler(CountdownTimerStep);
}
private void ButtonStart_Click(object sender, RoutedEventArgs e)
{
_time = 10;
_countdownTimer.Start();
}
private void CountdownTimerStep(object sender, EventArgs e)
{
if (_time > 0)
{
_time--;
this.labelTime.Content = _time + "s";
}
else
_countdownTimer.Stop();
}
}