VisualStudio2022、.NET Framework4.8、C#
にてSystem.Timers.Timerを利用し1秒毎の定期処理を実装しています
Start()実行後初回は即時実行したいため以下のように実装しました。
1.Start()呼び出し前にAutoResetをfalse、Intervalを1とする
2.初回のTimer呼び出しの際にAutoResetをtrue、Intervalを1000に設定する
C#
1 private static System.Timers.Timer T; 2 static void Main(string[] args) 3 { 4 T = new System.Timers.Timer(); 5 T.AutoReset = false; 6 T.Elapsed += Timer_Elapsed; 7 T.Interval = 1; 8 T.Start(); 9 Console.WriteLine(string.Format("Enabled:{0},AutoReset:{1},Interval:{2}", T.Enabled, T.AutoReset, T.Interval)); 10 Console.ReadKey(); 11 T.Stop(); 12 Console.ReadKey(); 13 } 14 private static bool Initialized = false; 15 private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 16 { 17 Console.WriteLine(string.Format("Enabled:{0},AutoReset:{1},Interval:{2}", T.Enabled, T.AutoReset, T.Interval)); 18 if (!Initialized) 19 { 20 Initialized = true; 21 T.AutoReset = true; 22 T.Interval = 1000; 23 } 24 // 処理 25 }
処理の実行タイミングは望んだとおりに動作しているのですが、なぜかStop()でタイマーが停止しません
わかっていることは
Start()した直後はTimer.Enableがtrueなのですが、Timerの処理が呼び出されたときにはfalseとなっており、それが原因でおそらくはStop()が利かないものと思っています。
もしかしたら初回の呼び出しでIntervalを設定した際再度Start()を呼び出さないとならないかとも思いましたが、実際には今のコードでTimerの処理自体は定期的に呼び出されています。(Enableがfalseなのに呼び出しが行われているのもおかしい気はしますが…)
初回は即時実行するタイマー処理を実装し、Stop()で処理を止められるようにしたいのですがどうしたらよいでしょうか?
回答3件
あなたの回答
tips
プレビュー