1

キオスクアプリケーションで次の問題が発生しました。

サムネイルのあるウィンドウがあります。ユーザーがサムネイルをクリックすると、情報を含む別のウィンドウ(docview)が表示され、中央にドキュメントが表示されます。

docviewをすぐに表示してから、ドキュメントの読み込みを開始し(ドキュメントの読み込みには1〜3秒かかります)、後でインターフェイスに追加したいと思います。

親指をクリックした瞬間、インターフェイスが1〜2秒間フリーズし、ドキュメントとともにdocviewが表示されます。

これが私がすることです:

        viewgrid.Children.Add(docView); // the main window uses this grid to display the windows
        viewgrid.InvalidateVisual();
        viewgrid.UpdateLayout(); // at this point I would like to have the docView visible
        docView.showDocument(); //and afterwards, the loading of the document should start and be also visible eventually..

LayoutUpdatedイベントを使用しようとしましたが、成功しませんでした。また、showDocumentを別のスレッドに配置しても役に立ちませんでした。Application.DoEvents()についても読みましたが、これは非推奨であり、とにかく悪い習慣のようです。

これをどのように解決すればよいですか?

前もって感謝します!

4

2 に答える 2

0

ドキュメントをロードするには、BackgroundWorker オブジェクトを使用する必要があります。スレッド化を試みたがうまくいかなかったとおっしゃいましたが、スレッド化を機能させる必要があり、バックグラウンド ワーカーを使用することをお勧めします。 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx

読み込んでいるドキュメントの種類はわかりませんが、ここで説明されているようにバインドを使用して RichText ファイルを読み込んでいます: http://www.rhyous.com/2011/08/01/loading-a-richtextbox-from-an- rtf-file-using-binding-or-richtextfile-control/

BackgroundWorker にドキュメントをロードするだけで、同じことを行うことができます。ドキュメントが読み込まれたら、バインドされたプロパティを更新すると、UI が更新されます。

于 2012-04-13T15:25:46.243 に答える
0

非同期バインディングの使用を試すことができます。または、別のスレッドと Dispatcher を使用して手動で実行します。しかし、それはあなたの ShowDocument が行っていることに依存し、それは遅いです。

于 2012-04-13T14:25:18.243 に答える