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;
}
コメント