1

これは投機的な質問なので、コードは提供されていません。

大きな XML ファイルを受け取り、ユーザーが編集するためにこれからビューを作成するアプリケーションがあります。XML の読み込みはバックグラウンド ワーカーで実行され、ツリー ビューを介して非常にバニラな MVVM の方法でビューにバインドされます。

これはすべて非常にうまく機能し、ワーカーが XML をロードしている間、適切な待機カーソルが表示されます。

ただし、XML ファイルが非常に大きくなると (20M)、新しいビューの描画中に UI がハングします。これは予想されることですが、アプリがまだ生きているというすべての視覚的な手がかりを意味し、同様にフリーズします. 現時点では、ペイント直前のワーカーでロードが完了すると、カーソルが変更されます。この UI アクションの後に待機中のカーソルを変更できるように、ハンドルとして使用できるコントロールまたは気の利いたトリックの「paintingHasFinished」タイプのイベントはありますか?

4

2 に答える 2

1

ディスパッチャーを使用して、作成した ViewModel を 1 つずつ追加するか、x のバッチで追加して、項目が徐々に追加され、読み込み操作の最後に測定/レイアウト スレッドが過負荷にならないようにすることができます。これにより、全体的な読み込み時間が長くなりますが、ユーザー エクスペリエンスも向上します。

また、仮想化がオンになっていることを確認してください (スタック パネルの仮想化またはデータグリッド上の列/行の仮想化)。これにより、大規模なデータ セットでのパフォーマンスが大幅に向上します。

于 2011-09-05T14:18:45.820 に答える
1

Dispatcher を使用して、View のレンダリングがいつ終了したかを確認できます。

これを追加してみてください:

this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() =>
    {
        Cursor = Cursors.Arrow;
    }
));

これはディスパッチャーにフックし、非同期呼び出しを使用して、読み込みが完了したときにコールバックを呼び出すように要求します。提供された匿名アクションが呼び出され、カーソルが通常の状態に戻ります。

于 2011-09-05T15:24:34.493 に答える