Obtener una marca de cambio de reloj del sistema en C #
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.
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);