2011-06-23 13 views
6

プログラムが開始されると、My timer 'Elapsed'イベントが2回発生します。 'Elapsed'イベントハンドラの唯一の割り当ては 'Main'メソッドにあります。私が間違っていることがありますか?C#コマンドラインプログラムでタイマ経過イベントが2回発生する

//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();    
    } 

UPDATE:

@ fparadis2が提供する自動リセットは、二回の発射を修正しました。基本的な問題は、イベントが2回発生するように、私のタイマー間隔が30000ミリ秒(30秒)ではなく30ミリ秒に設定されていることでした。

+0

[timer fire twice]の可能な複製(http://stackoverflow.com/questions/4309254/timer-fire-twice) – user7116

答えて

13

timerInvervalが十分小さい場合、クロックを停止する前にElapsedイベントが2回発生する可能性があります。タイマーを起動するたびに1回だけ通知を受けるには、

を入力する必要があります。 documentationで指定されているように

Elapsedイベントの処理が長い間隔以上続く場合は、イベントが別のThreadPoolスレッドで再び上昇する可能性があります。この状況では、イベントハンドラはリエントラントである必要があります。

+0

クロックは未定義ですか? - リンクが壊れている –

2

また、patternを確認することもできます。

関連する問題