Pregunta

Es su forma de ejecutar un delegado o event en C # cuando los segundos, minutos, horas, ... cambian en el reloj del sistema, sin usar un temporizador que verifica cada milisegundo si la propiedad ha cambiado y ejecuta el evento con un retraso de un máximo de un milisegundo.

Por lo tanto, quiero evitar el sondeo y activar un evento en un momento determinado.

¿Fue útil?

Solución

Si su pregunta es: " ¿Cómo ejecuto un delegado cada segundo / minuto / hora completo? "

Para intervalos de minutos y horas, puede hacer algo como se muestra en mi respuesta en esta pregunta SO:

Esto debería ser bastante preciso, pero no será exacto al milisegundo.

Para segundos intervalos, iría con un temporizador con un simple intervalo de 1 segundo. Desde la perspectiva del usuario, creo que no hay mucha diferencia si la acción se ejecuta en xx: xx: xx.000 o en xx: xx: xx.350.

Otros consejos

Puede suscribirse a SystemEvents.TimeChanged . Esto se dispara cuando se modifica el reloj del sistema.

Resolví esto en una aplicación de formularios estableciendo el intervalo en (1000 - DateTime.Now.Millisecond)

        _timer1 = new System.Windows.Forms.Timer();
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);
        _timer1.Enabled = true;
        _timer1.Tick += new EventHandler(updateDisplayedTime);

y en el controlador de eventos restablece el intervalo para evitar la deriva.

        <handle event>
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top