2

(WPFを使用)

私が書いた小さなアプリケーションでは、いくつかのカウントダウンタイマーを使用しています。このために私はを使用しましたDispatcherTimer

counter01 = new DispatcherTimer();
counter01.Tick += new EventHandler(counter01_Tick);
counter01.Interval = new TimeSpan(0, 0, 1);

しかし、プログラムをテスト/使用すると、(たとえば)60分のカウントダウンに設定すると、実際の時間と比較して数分遅れることに気づきました。

上記のように使用した場合、何らかの理由DispatcherTimerで必ずしも正確に1秒になるとは限りませんか?

4

2 に答える 2

6

このようなタイマーは絶対に正確ではありません。結局のところ、ディスパッチャ スレッドで実行する必要があります。ディスパッチャが他のスレッドの処理でビジー状態になっているとしたら、どうなるでしょうか。

1秒に約1回目に見えるほど十分に近い可能性があります-Stopwatch単にカウントするのではなく、かなり正確なカウントダウンを取得するには、現在の時間を取得して「ターゲット」時間から差し引く(またはを使用する)必要がありますタイマーが作動した回数。

于 2012-06-12T05:47:05.850 に答える
4

MSDN は、(に関してDispatcherTimer)

タイマーは、時間間隔が発生したときに正確に実行されることは保証されていませんが、時間間隔が発生する前に実行されないことは保証されています。

イベントごとTickに、タイマーは不確定な時間だけオフになります。1 時間 (3600 ティック) の場合、これは加算されます。タイマー間隔を 1 時間に設定すると、エラーがはるかに小さくなることが予想されます (ただし、理論的には、ディスパッチャーはその 1 つのティック中に非常にビジーであるため、エラーは他のケースよりも大きくなる可能性があります)。

于 2012-06-12T05:54:21.643 に答える