|
分類:[C#]
こんにちは、もんたです。 System.Threading.Timerについて質問させて頂きたいと思います。
複数のスレッド(Invokeで呼び出し)でTimerを作成し定期的な処理を実行させているのですが、 ごくまれにコールバックが物凄い勢い(0秒間隔?)で呼び出されてしまいます。 処理内容は、
@各スレッドのコンストラクタでTimerをnewし、とりあえずTimer.Change(Timeout.Infinite, Timeout.Infinite)に設定。 Aボタン契機で実行されるメソッドでTimer.Change(0, 1000)に設定し実行(全スレッドで行われる) Aコールバック内の初めにTimerをTimer.Change(Timeout.Infinite, Timeout.Infinite)で停止し、コールバックの最後にTimer.Change(0, 1000)で実行 (間にTimerに関係のない処理は有り)
といった形で、ABは10時間ほど実行され続けます。 呼び出し間隔の設定はTimer.Change(0, 1000)とTimer.Change(Timeout.Infinite, Timeout.Infinite)のみ使用しています。 おそらくTimerが破壊されてしまっていると思うのですが、こういった現象はどういった場合に起こるのでしょうか?
一時しのぎの対応方法でも構いませんで、ご教授頂けると幸いです。
【環境】 Windows7 .Net4.5 VS2012 C# WPF
|