9

特定のシナリオを念頭に置いていませんが、DispatcherTimerではなくTimerを使用したいシナリオを考えていたときに、この質問が頭に浮かびました。

タイマーイベントが発生するたびに計算量の多いタスクを実行する必要があるシナリオでは、 UIに小さな変更を加えると、パフォーマンスの点で次のようになります。

  1. 通常のタイマーを使用してから、アプリケーションのディスパッチャーを使用してUIを変更します
  2. DispatcherTimerを使用します(必要に応じて、非同期のバックグラウンドワーカーで計算量の多い作業を行う可能性があります)。

私の推測では、UIスレッドのブロックをできるだけ長く解除しておくと、ユーザーエクスペリエンスが向上すると思います。これ望ましい場合、そのようなシナリオで注意すべき問題はありますか?

編集:

質問が明確ではないと感じたので、作り上げた例ではありますが、具体的なものを追加してみます。

たとえば、2分ごとに大きなファイルを読み取る必要があり、それが終わったら、リストボックスにアイテムを追加する必要があります。ファイルの読み取り/処理に10〜15秒かかるとしましょう。その間、UI作業は行いません。このようなもののための最良のアプローチは何でしょうか?

4

6 に答える 6

5

主なポイント:

計算集約的なタスクを実行する

これは、DispatcherTimer を使用していないことを示します。主に、メイン スレッドで小さなタスクを実行し、別のスレッドの作成を回避するために存在します。

DispatcherTimer を使用して Backgroundworker を開始すると、その主な目的が回避されます。

したがって、ここでは通常のタイマーを使用してください。

于 2011-12-04T10:37:27.327 に答える
2

さらに調査と分析を行った結果、作成した例では通常のタイマーが最適であるという結論に達しました。これまでのところ、コードで潜在的な問題を引き起こす可能性のある特定のものを探す必要はありませんでした。そうは言っても、優れたコーディングの実践は決して悪いことではありません!

于 2012-02-12T07:18:53.797 に答える
1
  • タイマーは、アプリケーションで定期的なイベントを生成します

  • DispatcherTimerは、指定された時間間隔と指定された優先度で処理されるDispatcherキューに統合されたタイマーです。

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

でタイマーが使用されている場合WPF applicationは、に注意する必要がありTimer runs on a different thread then the user interface (UI) threadます。ユーザーインターフェイス(UI)スレッド上のオブジェクトにアクセスするには、InvokeまたはBeginInvokeを使用してユーザーインターフェイス(UI)スレッドのディスパッチャーに操作を投稿する必要があります。タイマーではなくDispatcherTimerを使用する理由は、DispatcherTimerがDispatcherと同じスレッドで実行され、DispatcherPriorityを設定できるためです。

于 2011-12-04T09:39:26.037 に答える
1

Timer と DispatcherTimer の比較 ここに投稿されたいくつかの回答は、質問により具体的ですが、このリンクは一般的な情報とアドバイスを提供すると思います。

于 2013-01-09T18:33:45.527 に答える
0

UI要素にバインドされたスカラー(コレクションではない)値を変更する場合は、UIスレッドからだけでなく(タイマーデリゲートなどから)変更できます。この場合、Dispatcher.Invoke/BeginInvokeを使用する必要はありません。

于 2011-12-04T09:57:44.947 に答える
0

別のオプションは、各タイマー反復で BackgroundWorker クラス インスタンスを作成して DispatcherTimer を使用することです。また、多くの場合、Dispatcher.Invoke/BeginInvoke を使用する必要がなくなります。

于 2011-12-04T10:11:47.223 に答える