2011-06-23 11 views
6

Mi temporizador El evento 'transcurrido' se dispara dos veces cuando se inicia el programa. La única asignación del controlador de eventos 'transcurrido' está en el método 'Principal'. ¿Hay algo que estoy haciendo mal?Evento transcurrido del temporizador que se activa dos veces en el programa de línea de comandos C#

//class level clock 
public static System.Timers.Timer Clock; 

static void Main(string[] args) 
    { 
     Clock = new System.Timers.Timer(); 
     Clock.Elapsed += new ElapsedEventHandler(Clock_Elapsed); 
     Clock.AutoReset = false; 
     Clock.Interval = timerInterval; //this needs to be in milliseconds! 
     Clock.Enabled = true; 

     //run infinite loop until q is pressed 
     while (Console.Read() != 'q') 
     {} 
    } 

static void Clock_Elapsed(object sender, ElapsedEventArgs e) 
    { 
    Clock.Stop(); 
    //do some stuff 
    Clock.Start();    
    } 

ACTUALIZACIÓN:

El AutoReset proporcionada por @ fparadis2 fija el disparando dos veces. La cuestión básica fue que mi intervalo de temporizador se estableció en 30 milisegundos en lugar de 30000 milisegundos (30 segundos) para que el evento se disparara por partida doble.

+0

posible duplicado de [fuego temporizador dos veces] (http://stackoverflow.com/questions/4309254/timer-fire-twice) – user7116

Respuesta

13

Si timerInverval es lo suficientemente pequeño, es posible que el evento transcurrido se dispare dos veces antes de tener la oportunidad de detener el reloj. Debe hacer

Clock.AutoReset = false; 

para recibir notificaciones solo una vez cada vez que inicie el temporizador.

Como se especifica en la documentation:

Si el procesamiento del evento transcurrido dura más tiempo que el intervalo, el evento podría ser elevado de nuevo en otro hilo ThreadPool. En esta situación, el controlador de eventos debe ser reentrante.

+0

¿El reloj no está definido? - El enlace está roto –

2

También puede considerar marcar pattern.

Cuestiones relacionadas