DispatcherスレッドはUIコントロールでどのように機能しますか?DispatcherスレッドはUIコントロールでどのように動作するのですか
答えて
編集。
実行中のタスクがある場合は、BackGroundWorkerを使用してバックグラウンドスレッドに委任し、ディスパッチャを使用してメッセージをUIに戻す必要はありません。 This is a very good article.
非常に広い質問です。 WPF Architectureでここから始めることをお勧めします。 WPFで
ほとんどのオブジェクトは 並行性とスレッドを扱うための 基本的な構築物を提供する DispatcherObjectに、由来します。 WPFは で、ディスパッチャによって実装されたメッセージングシステム に基づいています。この は、使い慣れたWin32 メッセージポンプとよく似ています。実際、WPF ディスパッチャは、 のスレッド間呼び出しを実行するためにUser32メッセージを使用します。ディスパッチャスレッド 親和性 -
は本当にWPFで同時実行 を議論する際に が理解への2つのコアコンセプトがあります。 WPFの設計段階
、 目標は 単一の実行スレッドに移動しましたが、非スレッド 「アフィニティ」モデル。スレッドアフィニティ は、実行中のスレッドのIDが のIDを使用して に状態を保存すると発生します。最も多くの の一般的な形式は 状態を格納するために スレッドローカルストア(TLS)を使用することです。スレッドアフィニティは、 実行の各論理スレッドが、 メモリ集中型になることができる オペレーティングシステム内の1つの物理スレッドだけが所有する であることを要求します。結局のところ、WPFの スレッドモデルは、 の既存のUser32スレッドモデル スレッドのシングルスレッド実行 アフィニティと同期していました。この の主な理由は、 OLE 2.0、クリップボード、およびインターネット エクスプローラなどのすべてのシステムで、単一スレッド アフィニティ(STA)実行が必要な相互運用性でした。あなたがSTA スレッドを持つオブジェクトを持っていることを考えると、あなたは は、スレッド間で通信する方法、そしてあなたが正しい スレッド上にある 検証を必要としています。ここには ディスパッチャの役割があります。ディスパッチャは基本的な メッセージディスパッチシステムであり、 複数優先キューがあります。メッセージの例 には、生の入力 通知(マウス移動)、フレームワーク 機能(レイアウト)、またはユーザコマンド (このメソッドの実行)が含まれます。 DispatcherObjectから を派生させると、STAの動作を持つ CLRオブジェクトが作成され、 には作成時に ディスパッチャーへのポインタが渡されます。
hmm ..私の疑いは、UIの背後で長時間実行されているプロセスが起きているときです。その時、WPF UIは応答しないか、ディスパッチャスレッドを使用して解決できますか? –
- 1. .NETのメインUIスレッド以外のスレッドでUIを実行するにはどうすればよいですか?
- 2. コードがバックグラウンドスレッドまたはUI(Dispatcher)スレッドで実行されているかどうかを検出する
- 3. xamarin uiテストでapp.DragAndDrop()はどのように動作するのですか
- 4. 別のUIスレッドでのWPFコントロール?
- 5. CUDAスレッド、SMX、SP、ブロック、どのように動作するのですか?
- 6. iOS UI:アラームアプリで使用されるコントロールを作成するにはどうすればよいですか?
- 7. 動的にWPFのスレッドでコントロールを作成する
- 8. アンドロイドの非UIスレッドからUIを更新するにはどうすればよいですか?
- 9. UIスレッドのスレッド優先度はどのくらいですか?
- 10. UIスレッドとEclipseの他のスレッドの両方で機能するUI更新メソッドを実装するにはどうすればよいですか?
- 11. UIオブジェクトとApplication.Current.Dispatcherへの参照がnullでない場合にDispatcherにアクセスする方法は?私は、非UIスレッド(私のWPFコントロールよりも別のスレッド)からこれを呼んでいる
- 12. Silverlightで複数のコントロールを動的に作成するにはどうすればよいですか?
- 13. コントロールは実際にLaravelアプリケーション内でどのように動くのですか?
- 14. Dispatcherはどこから制御を受け取りますか?ユーザー・コントロールで
- 15. recwatchはどのように動作するはずですか?
- 16. メッセージキューはどのように動作するはずですか?
- 17. compareTo()はどのように動作するのですか
- 18. ディスパッチキューはどのように動作するのですか
- 19. amphpはどのように動作するのですか
- 20. href =?idはどのように動作するのですか
- 21. 〜はどのように動作するのですか?
- 22. model_path()メソッドはどのように動作するのですか?
- 23. @tailrecはどのように動作するのですか
- 24. テストクライアントはどのように動作するのですか
- 25. ペルコナはどのように動作するのですか?
- 26. このスレッドの途中でUIを更新するにはどうすればよいですか?
- 27. スレッドのメソッドを作成するにはどうすればよいですか?
- 28. UIフォルダのみを公開すると、Webアプリケーションはどのように動作するのですか?
- 29. 別のスレッドで動作するクラスの関数をどのように呼び出すのですか?
- 30. WindowsユニバーサルアプリケーションのUIを別のスレッドから更新するにはどうすればよいですか?
投票のためにコメントしてください。 –
少し正確に質問してください。 –