2

私のアプリは、起動時に MainWindow にユーザー コントロールを読み込む必要があります。ただし、ユーザーコントロールの初期化は遅いです。(ビジネスデータをロードするためではなく、すでに UI をビジネスレイヤーから分離しています)

私がやりたいのは、ユーザーコントロールの初期化を待っている間、ビジーインジケーターが表示され、ユーザーコントロールの初期化が完了すると消えます。

現在、MainViewModel に IsBusy プロパティがあり、MainWindow の busyindicator にデータバインドされています。

子ユーザー コントロールは、コンテンツ コントロールを介して表示されます。

presenter.Content = new ChildUserControl(); 
//presenter is the contentcontrol in MainWindow

ただし、ビジー インジケータの初期化と表示の両方を同時に実行するにはどうすればよいでしょうか。この問題を処理するには、別のスレッドが必要なようです。

ただし、メイン UI スレッドにビジー インジケーターを表示させながら別のスレッドで初期化を実行しても機能しません。これは、別のスレッドの子コントロールをその親コン​​トロール (この場合は MainWindow) 内に配置できないためです。

それに関するアイデアはありますか?

4

2 に答える 2

1

私はそれを自分で実装しました。つまり、XPS ドキュメントの読み込みがあり (非常に遅い)、スピナー (「ビジー インジケーター」) を実装する必要があったというシナリオがありました。しかし、それらは同じスレッド上にあったため、機能しませんでした。

ドウェインは、これをマルチスレッド化する巧妙な方法を考え出し、うまくいきました。 http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx

于 2013-05-15T04:52:49.770 に答える
0

アニメーション化されたローディング カーソルの表示についてはどうでしょうか。Windows は、マウスのスレッド化を既に処理しています。以前にこの問題が発生し、別のスレッドに独自の読み込みアニメーションを実装しましたが、レンダリングの優先順位に問題があり、マウス カーソルが進行状況ダイアログの上を移動していない限り、メインの実行コードが遅くなりました。https://stackoverflow.com/a/307020/2247427

于 2013-05-14T22:57:35.687 に答える