C#で、一定時間の間隔で処理をする

http://msdn.microsoft.com/ja-jp/library/system.threading.timer.aspx
ほぼここのコピペです。監視系のプログラムが作りたくて、時間無制限で延々と実行するように作り変えてみました(サンプルプログラムは有限時間でした)。コンソールアプリです。

using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        AutoResetEvent autoEvent = new AutoResetEvent(false);
        StatusChecker statusChecker = new StatusChecker();

        // Create the delegate that invokes methods for the timer.
        TimerCallback timerDelegate =
            new TimerCallback(statusChecker.CheckStatus);

        // タイマー起動
        Console.WriteLine("{0} タイマーを起動します.\n",
            DateTime.Now.ToString("h:mm:ss.fff"));

        Timer stateTimer =
        //最後の2つの値→初動実行までの時間,実行間隔(ミリ秒)
                new Timer(timerDelegate, autoEvent, 0, 60000);

        // タイマーの待機時間は-1にすると無制限になる(有限にしたい場合はミリ秒で記述)
        autoEvent.WaitOne(-1, false);
        //タイマーの開放
        stateTimer.Dispose();
    }
}

class StatusChecker
{
    public StatusChecker()
    {
    }

    // This method is called by the timer delegate.
    public void CheckStatus(Object stateInfo)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;

        //ここに一定時間で実行したい処理を書く
        Console.WriteLine("{0} Checking status {0}.",
            DateTime.Now.ToString("h:mm:ss.fff"));
    }
}
  • 2008/7/2追記

一定時間で実行したい処理でオブジェクトを作ったりするとなぜか4回繰り返して停止してしまうので、タイマーを開放してみたら解消しました。

        //タイマーの開放
        stateTimer.Dispose();

デバッグでこの現象は発生しなくてリリース版で発生しました。