0

そこで、DispatcherTimerを使用してタイマーをエミュレートするアプリケーション(Windows Phone 7.5 over c#)を入手しました。間隔を1ミリ秒に設定しました。

timer.Interval = new TimeSpan(0,0,0,0,1);

次に、簡単なカウントダウンを行うためにTimeSpanを宣言しています。

TimeSpan countdown = TimeSpan.FromSeconds(10);

各ダニで1ミリセンコンドを差し引く:

countdown = countdown.Subtract(TimeSpan.FromMilliseconds(1));

Visual StudioのWindowsPhoneエミュレーター256/512では、「問題なし」で動作しますが、電話(LG Quantum)で実行すると、精度に問題があるようです。私はそれをアプリケーションを実行している私のPC画面と比較しました、そしてそれは電話で遅くなります。携帯電話でアプリケーションをデバッグモードで実行しないようにしました。これに対する解決策はありますか?または私は別のアプローチを取る必要がありますか?

4

2 に答える 2

6

ここでは別のアプローチが適しています。

  1. タイマーを開始するときに現在の時刻を記録します

    DateTime startTime = DateTime.Now;
    
  2. タイマーが作動するたびに、カウントダウンを再計算します

    TimeSpan countdown = DateTime.Now - startTime;
    
于 2012-06-10T21:54:04.807 に答える
3

経験によれば、あなたは単に電話のハードウェアが処理するにはあまりにも多くのイベントを発生させようとしているだけです。

MSDNから:

DispatcherTimerは、すべてのDispatcherTimerループの先頭で再評価されます。

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

実際の電話ハードウェアはシングルコアであるため、1秒あたり1000イベントを正確にキャプチャすることは最善の方法ではないことに注意してください。

ティック間の時間を増やし、新しい間隔に基づいてインクリメントするか、タイマーが開始された時間を取り、各ティックの現在の時間からそれを減算します。

于 2012-06-10T21:58:43.377 に答える