WPF用タイマー実装
WPF画面上で一定時間ごとにリフレシュする
普通のTimerではプロセスがSTAじゃないからとかエラーになったため、調べたらWPFの場合、WPF内部のDispatcherを利用しなければならないらしい
XAMLページ
using System.Threading; public partial class MainWindow : Window { private Timer _timer; public void CallBackTimerAction(object state) { this.Dispatcher.Invoke(new Action(() => { ///MyAction// }) ); } public void StartTImer() { _timer = new Timer(CallBackTimerAction, null, Timeout.Infinite, Timeout.Infinite); _timer.Change(0, 10000); // 10秒単位で、すぐ実行 //終了時にタイマーを停止させる。 this.Closing += (s, o) => { _timer.Change(Timeout.Infinite, Timeout.Infinite); // タイマ停止 _timer.Dispose(); }; } }
- CallBackTimerAction(object state) タイマーが実行する処理、ここでDispatcher.Invokeされる。
- new Timer(CallBackTimerAction, null, Timeout.Infinite, Timeout.Infinite); タイマーを定義、コールバックを指定する。
- _timer.Change(0, 10000); すぐ実行後、10000ミリ秒後に再度コールバックされる。
- this.Closing += (s, o) タイマーは自動で終了しないため、Window終了時に一緒に終了する。