ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

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終了時に一緒に終了する。