2012-03-05 5 views
7

したがって、私はSystem.Timers.Timerをセットアップし、Elapsedイベントのハンドラを持っています。それは期待どおりに動作します。デバッグ中にタイマーを停止する方法

ただし、elapsedハンドラ内で呼び出されるコードをデバッグする場合は、タイマーは追加のイベントを生成し続けます。したがって、タイマーイベントが互いに重なり合っているため、コードを一歩進めることはできません。

現時点での回避策は、ハンドラの入力時にタイマーでStopを呼び出し、終了時にStartを呼び出すことです。しかし、これはシステムがどのように動作するのかではなく、一時的な修正です。デバッグ中にタイマーを停止させるようにデバッガを設定する方法があるかどうか疑問に思っていました。

答えて

7

あなたが#if DEBUG directive にこれをラップすることができたり、あなたのTimer.ElapsedのイベントハンドラではSystem.Diagnostic.Debugger.IsAttached

+0

+1 - Debugger.IsAttachedプロパティの場合。私は#ifよりもそれが好きだと思う。 – Dunk

+0

正直なところ:これは達成したいことにかかっています。#ifのものでは、あなたのリリース版にはコードが全くありません。そこでは、他のオプションはそこで使われていないコードパスになります。 – Carsten

3

を使用することができますしたい場合は、多分あなたは停止して開始(または無効と有効)コードが含まれるように、いくつかのプリプロセッサディレクティブを使用しますタイマー:

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

私は一時的な回避策としてStop and Startを持っています。私はプリプロセッサ指令のファンではありません。しかし、それが私が取るルートかもしれない唯一の方法であれば。 – Dunk

関連する問題