Saltar al contenido

C# temporizador de cuenta regresiva

Queremos darte la mejor respuesta que descubrimos en todo internet. Nosotros esperamos que te sirva de ayuda y si puedes aportar alguna mejora siéntete libre de hacerlo..

Solución:

no debes usar Thread.Sleep aquí. Thread.Sleep en el subproceso de la interfaz de usuario bloquea la interfaz de usuario y su uso en otro subproceso genera una complejidad adicional debido a la sincronización del subproceso.

Si tiene C# 5 o el CTP asíncrono, probablemente pueda escribir un código muy similar al que hizo, ya que obtiene un equivalente basado en la continuación de Thread.Sleep que no bloquea la interfaz de usuario.

En C# 4 estándar, usaría un System.Windows.Forms.Timer.

Para iniciar la cuenta regresiva:

var minutes = 3; //countdown time
var start = DateTime.UtcNow; // Use UtcNow instead of Now
endTime = start.AddMinutes(minutes); //endTime is a member, not a local variable
timer1.Enabled = true;

En el controlador del temporizador escribes:

TimeSpan remainingTime=endTime-DateTime.UtcNow;
if(remainingTime

Para otras opciones de formato, consulte Cadenas de formato de intervalo de tiempo estándar.

Un problema que persiste con este código es que no funcionará correctamente si cambia el reloj del sistema.

Cuando usas DateTime.Now en vez de DateTime.UtcNow también se interrumpirá al cambiar de/a horario de verano o cambiar la zona horaria. Dado que desea identificar un determinado punto en el tiempo (y no una hora de visualización), debe usar UTC en lugar de la hora local.

Yo usaría un temporizador como este. Primero un par de variables de instancia.

private int _countDown = 30; // Seconds
private Timer _timer;

y en el constructor o evento de carga

_timer = new Timer();
_timer.Tick += new EventHandler(timer_Tick);
_timer.Interval = 1000;
_timer.Start();

y finalmente el controlador de eventos

void timer_Tick(object sender, EventArgs e)

    _countDown--;
    if (_countDown < 1)
    
        _countDown = 30;
    
    lblCountDown.Text = _countDown.ToString();

Si eres capaz, tienes la habilidad dejar una sección acerca de qué te ha parecido esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *