2012-03-05 12 views
7

Tak więc skonfigurowałem System.Timers.Timer i mam obsługę zdarzenia Elapsed. Działa zgodnie z oczekiwaniami.Jak zatrzymać czasomierz podczas debugowania

Jednakże, jeśli chcę debugować kod, który jest wywoływany w upływającym module obsługi; timer będzie generował dodatkowe zdarzenia. W związku z tym nie mogę wykonać pojedynczego kroku w kodzie, ponieważ zdarzenia z timerem układają się jeden na drugim.

Obecne obejście polega na wywołaniu Stop na zegarze po wejściu do obsługi i Start przy opuszczaniu. Jednak nie jest tak, jak powinien działać system, więc jest to tymczasowa poprawka. Zastanawiam się, czy istnieje sposób, aby skonfigurować debugger, aby zatrzymać timer podczas debugowania.

Odpowiedz

7

jeśli chcesz, możesz owinąć to w #if DEBUG directive lub użyć System.Diagnostic.Debugger.IsAttached

+0

+1 - Dla właściwości Debugger.IsAttached. Myślę, że podoba mi się to lepiej niż #if. – Dunk

+0

szczerze mówiąc: to zależy od tego, co chcesz osiągnąć - z #p coś, czego nie masz w ogóle w swoim wydaniu-wersji, gdzie druga opcja będzie tam nieużywaną ścieżką kodu. – Carsten

3

W swojej obsługi Timer.Elapsed zdarzeń, może można korzystać z niektórych dyrektyw preprocesora zawierać kod, który zatrzymuje się i zaczyna się (lub blokuje i umożliwia) licznik czasu:

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

Mam przystanek i start jako tymczasowe obejście problemu. Nie jestem fanem dyrektyw preprocesora. Ale jeśli jest to jedyny sposób, który może być drogą, którą bierzemy. – Dunk

Powiązane problemy