visual usa timers tick reloj net interval con como asp c# timer system sync clock

c# - usa - timer elapsed visual basic



C#, System.Timers.Timer, se ejecuta cada 15 minutos en sincronización con el reloj del sistema (3)

Al iniciar el programa, o al cambiar los tiempos del evento que se activarán, cargue los tiempos del evento en la memoria (para evitar leer estos datos del disco duro por segundo). Luego configure un temporizador para disparar cada 1 segundo. Un temporizador configurado para disparar cada 1 segundo tiene muy poca sobrecarga en el procesador. Configura uno y abre el administrador de tareas y ni siquiera notarás que el procesador está ejecutándose más de lo que estaba antes de que se ejecutara el temporizador. Luego, marque el evento del temporizador para verificar si es hora de disparar un evento.

¿Cómo obtengo System.Timers.Timer para desencadenar eventos transcurridos cada 15 minutos en sincronización con el reloj del sistema? En otras palabras, quiero que se active exactamente en xx: 00, xx: 15, xx: 30, xx: 45 (donde xx significa cualquier hora)


Puede dejar que transcurra cada segundo y verificar si la hora actual es 00, 15, 30 o 45 y solo luego reenviar el evento.

Una primera idea sería:

private static System.Timers.Timer aTimer; private static System.DateTime _last; public static void Main() { aTimer = new System.Timers.Timer(10000); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); aTimer.Interval = 1000; aTimer.Enabled = true; Console.WriteLine("Press the Enter key to exit the program."); Console.ReadLine(); } private static void OnTimedEvent(object source, ElapsedEventArgs e) { DateTime time = new DateTime( 1,1,1, DateTime.Now.Hours, DateTime.Now.Minute ); if( time.Minute==0 ||time.Minute==15 || time.Minute==30 || time.Minute==45 ) { // Avoid multiple notifications for the same quarter. if ( _last==DateTime.MinValue || _last!=time ) { _last = time; // Do further processing. doProcessing(); } } }

(Ejemplo basado en esta documentación de MSDN )


use Quartz.net. Luego puede usar expresiones regulares para definir el intervalo.