2012-03-05 25 views
7

Así que configurar un System.Timers.Timer y tienen un controlador para el evento Elapsed. Funciona como se esperaba.Cómo detener el temporizador durante la depuración

Sin embargo, si quiero depurar el código que se llama dentro del manejador transcurrido; el temporizador continuará generando eventos adicionales. Por lo tanto, no puedo pasar un solo paso a través del código porque los eventos del temporizador se acumulan uno encima del otro.

La solución actual es llamar al Stop en el temporizador al ingresar el controlador y al Start al salir. Sin embargo, no es así como se supone que el sistema funciona, por lo que es una solución temporal. Me preguntaba si hay una forma de configurar el depurador para detener el temporizador mientras se depura.

Respuesta

7

si lo desea, puede envolver esto en un #if DEBUG directive o puede utilizar System.Diagnostic.Debugger.IsAttached

+0

+1 - Para la propiedad Debugger.IsAttached. Creo que me gusta más que #if. – Dunk

+0

para ser honesto: eso depende de lo que quiera lograr: con la opción # si no tiene el código en su versión de lanzamiento, donde la otra opción será una ruta de código no utilizada allí. – Carsten

3

En el controlador de Timer.Elapsed caso, tal vez usted puede utilizar algunas directivas del preprocesador para incluir código que se detiene y se inicia (o desactiva y permite) el temporizador:

private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    { 
#if DEBUG 
     (source as Timer).Stop(); 
     // or 
     (source as Timer).Enabled = false; 
#endif 

     // do your work 

#if DEBUG 
     (source as Timer).Start(); 
     // or 
     (source as Timer).Enabled = true; 
#endif 
    } 
+0

Tengo Stop and Start como una solución temporal. Realmente no soy partidario de las directivas de preprocesador. Pero si esa es la única forma en que podría ser la ruta que tomo. – Dunk

Cuestiones relacionadas