TimerのAutoResetプロパティ

C#でタイマーをコピペで実装していると、設定しているプロパティの意味を忘れてしまうのでメモ。

AutoResetプロパティ

TimerにあるAutoResetですが、

Falseを設定すると、指定した時間経過後、1回だけイベントが発生する。

Trueを設定すると、指定した時間経過で、毎回イベントが発生する。

AutoResetプロパティだけ変更してすると以下のイメージ。

AutoResetをFalseにしたタイマーでも、Startメソッドを実行すると、指定時間後にイベントが再度発生します。

今回使用したソースは以下です。

private void Form1_Load(object sender, EventArgs e)
{
    // AutoReset=Falseタイマーの生成
    TmrAutoResetFalse = new System.Timers.Timer();
    TmrAutoResetFalse.AutoReset = false;            // AutoResetをFalseにする
    TmrAutoResetFalse.Interval = 10000;
    TmrAutoResetFalse.Enabled = true;
    TmrAutoResetFalse.Elapsed += new ElapsedEventHandler(TmrAutoResetFalse_Cycle);
    
    // AutoReset=Trueタイマーの生成
    TmrAutoResetTrue = new System.Timers.Timer();
    TmrAutoResetTrue.AutoReset = true;              // AutoResetをTrueにする
    TmrAutoResetTrue.Interval = 10000;
    TmrAutoResetTrue.Enabled = true;
    TmrAutoResetTrue.Elapsed += new ElapsedEventHandler(TmrAutoResetTrue_Cycle);

}

private int CycleCount_False;
private int CycleCount_True;

public void TmrAutoResetFalse_Cycle(object sender, ElapsedEventArgs e)
{
    CycleCount_False++;
    if (InvokeRequired)
    {
        Invoke(new DelegateWrite(WriteFalseCycle));
    }
}

public void TmrAutoResetTrue_Cycle(object sender, ElapsedEventArgs e)
{
    CycleCount_True++;
    if (InvokeRequired)
    {
        Invoke(new DelegateWrite(WriteTrueCycle));
    }
}

delegate void DelegateWrite();

private void WriteFalseCycle()
{
    txtFalse.Text += CycleCount_False.ToString() + "回実行されました。" + Environment.NewLine;
}

private void WriteTrueCycle()
{
    txtTrue.Text += CycleCount_True.ToString() + "回実行されました。" + Environment.NewLine;
}

コメント

タイトルとURLをコピーしました