WPF のメイン UI スレッドで要素を作成して別の要素に追加する必要があることはわかっています。これは、別のスレッドで Dispatcher を使用して簡単に行うことができます。
ただし、UI スレッドから要素を作成し、可能であればすべてを 1 つのバッチに追加したいと考えています。
これは、私が何千もの要素を構築していて、UI スレッドにかかる数秒でアプリケーション全体がフリーズするためです。
これを行う方法はありますか?
WPF のメイン UI スレッドで要素を作成して別の要素に追加する必要があることはわかっています。これは、別のスレッドで Dispatcher を使用して簡単に行うことができます。
ただし、UI スレッドから要素を作成し、可能であればすべてを 1 つのバッチに追加したいと考えています。
これは、私が何千もの要素を構築していて、UI スレッドにかかる数秒でアプリケーション全体がフリーズするためです。
これを行う方法はありますか?
私はそうは思わない; ただし、GUI を完全にハングアップさせずに要素を徐々にロードすることで、よりスムーズなユーザー エクスペリエンスを作成できます。CompositionTarget.Rendering
これは、フレームがレンダリングされるたびに呼び出されるイベントをサブスクライブすることで実行できます。追加する必要があるビュー モデル (および対応するコントロール タイプ) のリストを保持している場合は、そのうちのいくつか (たとえば 50 個) を作成し、イベント ハンドラー内のビジュアル ツリーに追加できます。次にイベントが呼び出されたときに、さらに 50 を追加します。
Prims のような複合アプリケーション パターンを使用することをお勧めします。WPF を使用して複合アプリケーションを構築するためのパターンを参照してください。Prism を使用すると、アプリのコンポーネントを分離し、必要に応じてロードすることもできます。また、次のことも確認できます: Prism これがお役に立てば幸いです...
2 つの UI スレッドを作成することは可能です。1 つの UI スレッドでウィンドウを作成し、別の UI スレッドである種の進行状況表示 (進行状況バー) を表示します。ウィンドウを作成したら、ウィンドウを見えるようにします。
http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/