2012-03-05 23 views
7

Quindi ho impostato un System.Timers.Timer e ho un gestore per l'evento Elapsed. Funziona come previsto.Come arrestare il timer durante il debug

Tuttavia, se si desidera eseguire il debug del codice chiamato all'interno del gestore trascorso; il timer continuerà a generare eventi aggiuntivi. Pertanto, non posso eseguire un singolo passaggio nel codice perché gli eventi del timer si accumulano uno sopra l'altro.

Per risolvere il problema, chiamare Stop sul timer al momento dell'inserimento del gestore e Start quando si esce. Tuttavia, non è così che si suppone che il sistema funzioni, quindi si tratta di una soluzione temporanea. Mi chiedevo se c'è un modo per configurare il debugger per fermare il timer durante il debug.

risposta

7

se si vuole si può avvolgere questo in un #if DEBUG directive oppure è possibile utilizzare System.Diagnostic.Debugger.IsAttached

+0

+1 - Per la proprietà Debugger.IsAttached. Penso che mi piaccia meglio di #if. – Dunk

+0

a dire il vero: dipende da cosa vuoi ottenere - con la cosa #if che non hai affatto il codice nella tua versione di rilascio, dove l'altra opzione sarà un percorso di codice inutilizzato lì. – Carsten

3

Nel vostro gestore Timer.Elapsed evento, forse è possibile utilizzare alcune direttive del preprocessore di includere il codice che si ferma e si avvia (o disabilita e abilita) il timer:

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

Ho lo Stop and Start come soluzione temporanea. Non sono un vero fan delle direttive del preprocessore. Ma se questo è l'unico modo che potrebbe essere il percorso che prendo. – Dunk

Problemi correlati