1

ユーザーに統計を表示するために WPF TreeView を使用しています。TreeView は、MVVM を介して多数のオブジェクトにバインドされています。

TreeNode に多くのアイテムが含まれている場合、すべてのアイテムを表示するのに数秒かかることがあります。この間、アプリケーションは停止しているように見えます。

この遅延中に TreeView が応答しているように見せたいです。

これを WinForms で行う場合は、何らかの読み込みアイコンを表示し、バックグラウンド スレッドで計算を行い、その後で対応する TreeNode を更新します。

WPF でこの問題に対処する最善の方法は何ですか?

4

2 に答える 2

2

大量のデータを処理しているときにアプリケーションが動かなくなったように見えないように、スレッド化を使用する必要があります。

例:

現在開発中のアプリケーションでは、特定のファイルをすべてのフォルダーから検索する必要があります。これにより、検索全体が完了するまでアプリケーションがフリーズします(ウィンドウを最小化することさえできません)。

これを避けるために、代わりにバックグラウンドで検索を実行できる BackgroundWorker というものを使用します。これは、アプリケーションがバックグラウンドで激しい作業を行っている間でも、アプリケーションを制御できることを意味します。

Backgroundworker には WorkerReportsProgress プロパティもあります。これを有効にすると、プログレスバーまたはパーセンテージカウンターを簡単に更新して、作業中に何が起こっているかをユーザーに知らせることができます.

これについては、Professional C# 4 and .NET 4 という本で非常によく説明されています。Wrox から出版されています。

于 2012-04-15T09:46:55.277 に答える
1
  1. スレッドを使用してUIを活気づけます。

  2. TreeView[+]をクリックして、ユーザーが要求した場合にのみ、と子のルートノードのみをロードします。

  3. データ仮想化を使用してロードするため、UIに実際に表示されるデータのみを表示します。

これらのテクニックを組み合わせることで、たとえそれらがすでにあるとしても、パフォーマンスが大幅に向上します。

于 2012-04-15T09:55:13.317 に答える