1

WP7 用のオーディオ録音アプリケーションを作成しています。ViewModel クラスに DispatcherTimer オブジェクトがあり、記録が行われているときに経過秒数をカウントして、記録の長さをユーザーに表示します。アプリに次の問題があります。

DispatcherTimer のティック間隔は 1 秒 (1000) ミリ秒に設定されています。

開始ボタンを押すと、DispatcherTimer が開始されます。停止ボタンを押すと、DispatcherTimers スレッドが終了します。(すぐに!、そんなつもりじゃなかったと思った))

停止をすばやく (間に 1 秒未満) 押した後に開始ボタンを押すと、DispatcherTimer はまだ停止していないため、再起動に失敗します。(そのスレッドは終了していません)

基本的に、私の最大の懸念は、なぜ DispatcherTimer がティックの時間になるまで待たなければならず、それが停止したことを認識し、ティックを実行するために作成したスレッドを終了しなければならないのかということです。

この問題を回避するにはどうすればよいですか? ありがとうございました。

4

1 に答える 1

1

DispatcherTimersは、時間間隔が発生したときに正確に実行されることは保証されていませんが、時間間隔が発生する前に実行されないことが保証されています。これは、DispatcherTimer操作が他の操作と同様にDispatcherTimerキューに配置されるためです。DispatcherTimer操作が実行されるタイミングは、キュー内の他のジョブとその優先順位によって異なります。

参照: http: //msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer (v = VS.95).aspx

System.Threading.Timer別のスレッドで起動するタイマークラスである、を使用することをお勧めします。これは、UIなどを更新しようとしない純粋な数値タイミングに適しています。

于 2011-08-10T16:22:23.320 に答える