4

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

private DispatcherTimer _Timer = new DispatcherTimer();

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

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

4

1 に答える 1

6

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

DispatcherTimerクラスMSDNから

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

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

于 2010-04-16T11:58:55.840 に答える