4


2

WPF Dispatcherタイマーティックでアプリケーションがフリーズする

WPFディスパッチャータイマーの使用に少し問題があります。 タイマーティックごとに、アプリケーションが一瞬フリーズします(タイマーティックメソッドが終了するまで)。 これは私のコードです:

private DispatcherTimer _Timer = new DispatcherTimer();

_Timer.Tick += new EventHandler(_DoLoop);
_Timer.Interval = TimeSpan.FromMilliseconds(1500);
_Timer.Start();

これを回避し、アプリケーションをスムーズに実行する方法はありますか?

1 Answer


6


これは予想通りです。 _DoLoopはUIと同じスレッドで実行されます。

_ System.Timers.TimerをWPFアプリケーションで使用する場合、System.Timers.Timerがユーザーインターフェイス(UI)スレッドとは異なるスレッドで実行されることに注意してください。 ユーザーインターフェイス(UI)スレッド上のオブジェクトにアクセスするには、InvokeまたはBeginInvokeを使用して、ユーザーインターフェイス(UI)スレッドのDispatcherに操作をポストする必要があります。 * System.Timers.TimerではなくDispatcherTimerを使用する理由は、DispatcherTimerがDispatcherと同じスレッドで実行され、DispatcherTimerでDispatcherPriorityを設定できることです* _

時間のかかる計算を実行する必要がある場合は、別のスレッドで実行してUIの応答性を維持します。