2011-02-07 5 views
3

大量のデータを表示しようとするグリッドコントロールがあるため、UIスレッドでレンダリングするのに時間がかかります。Silverlight UI Thread Freezing

私は画面がビジーであるかどうかに応じてアニメーション表示されるローディングバーを追加しました(レンダリング中)。

ただし、グリッドがレンダリングしようとしているときにロードバーがフリーズしているだけです。私はこれが1つのUIスレッドとそのスレッドがビジーであるためだと仮定しています。

ローディングバーをアニメーションにする方法を知っている人はいますか?

多くのおかげで、あなたはUIが別のスレッドでレンダリングするためのデータを準備するための処理の一部を行う、UIのレンダリングからのフェッチ列挙またはデータを処理する必要が

マット

答えて

0

あなたが一度にすべてのデータをレンダリングするグリッドを主張した場合、それはすべてのグリッドのレンダリングコードは一種の古いWindowsフォームのような「歩留まり」かどうかは、「DoEvents関数()」できるかどうかに依存します方法。実際には、レンダリング中にUIスレッドに処理を戻さないように実装されているので、プログレスバーは決して更新されません。

コンテンツのレンダリング中に、グリッドからコードが呼び出されることはありますか?その場合は、これらのインスタンスを使用して進行状況バーの状態を更新することができます。

グリッドの内容を仮想化しましたか? VirtualizationStackPanelでレンダリングする必要があるFrameworkElementsをラップすると、基本的に無料でUI仮想化を取得できます。多少の複雑さが必要な場合は、PagedCollectionViewクラスを使用してデータセットをラップし、次にデータを仮想化することもできます。詳細はhereを参照してください。同じ種類の仮想化を実装する別の(より単純な)方法については、hereも参照してください。

+0

グリッドは抽象的な方法で問題を単純化しようとしました。実際にTelerikのサードパーティコントロールの1つを使用しているため、残念ながらコントロールコードを変更することはできません。 –

+0

実際にすべてのデータを一度に表示する必要がありますか?あるいは、ある種のページング/仮想化/遅延検索スキームが機能するでしょうか? –