4

大きな問題に直面しています。WPFアプリで、メインウィンドウにアニメーションの読み込み(ストーリーボード)のある境界線が含まれています。デフォルトでは折りたたまれています。大量のデータを読み込んだり、新しいXAML画面を読み込んだりすると、表示されて折りたたまれることがあります。

まず第一に、私はスレッディングをまったく使用していませんでした。また、フリーズとレイトで表示されるアニメーションの両方を使用していました。

それから私はこのようなスレッドを使い始めました:

Messenger.StartAnimation();
var task = Task.Factory.StartNew(() =>
                {
                    Thread.Sleep(150);
                }).ContinueWith((a) =>
                {
                    // HERE Screen moving + large amount of data loaded with Entity Framework
                    Thread.Sleep(200);

                    Messenger.StopAnimation();
                }, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, threadUIContext);

今回は、アニメーションが1秒間機能し、その後、すべてのデータと新しく表示された画面が読み込まれるまでフリーズしました。Aメインスレッドがすべてのスレッドをブロックするようなものです。

Messenger.StopAnimation()タイマーを追加して、3秒後に遅延させようとしました。これでも、すべてが変更されて新しい画面に読み込まれると、アニメーションが1秒間フリーズし、その後アニメーションが3秒間続きます。

私は試しましたがDispatcherBackgroundWorker以前のコードと同じ問題に遭遇しました。

アニメーションをポップアップに表示したり、透明な新しいウィンドウに表示したりしました。何もすることはありません、それは停止する前に常に1秒間フリーズすることになります...

情報については、私はObservableCollection(リストで試しましたが、同じ問題です)を使用し、の中に別の画面をロードContentControlしますMainWindow

私はtechdaysのビデオ、Fast and Furiousを見てきました。ビデオのようにスムーズなアニメーションを作りたかったのですが、フリーズを取り除くのは不可能のようです。

4

2 に答える 2

1

単純なコレクションビューで50以上の小さな画像を読み込むときにも、同じ問題が発生しました。最終的に、ビットマップを画面に描画する.NET Frameworkがメインスレッドを拘束するものであり、それを回避する方法がまったくないことがわかりました。すべての要素をビューに配置しようとしましたが、ビューにバインドされたコレクションをゆっくりと埋めていきましたが、監視可能なコレクションが変更されるたびに、.NET Frameworkがビュー内のすべての画像を再描画したため、これも役に立ちませんでした。

私はこれについてマイクロソフトのエンジニアに尋ねました、そして彼はそれが将来マイクロソフトによって修正されなければならないであろう.NETFrameworkの問題であることを率直に認めました。私の同僚は、独自のアルゴリズムを使用してすべてのピクセルを自分で描画することで、問題を回避できると述べました。

これを修正したい場合は、データの表示方法を変更する必要があると思いますが、解決策についてはサポートできません。

于 2012-11-05T13:27:28.430 に答える
0

ListViewがObservableCollectionにバインドされているという点で、Jackと同じ問題があります。多くの分析の結果、データベースのクエリではなく、ソートとグループ化のプロセスが遅いと判断しました。最後に別のスレッドを実装しましたが、もちろん、並べ替えとグループ化のためにディスパッチャーを呼び出す必要がありました。これにより、長時間実行される操作がメインUIスレッドに戻されたため、「読み込み中」のアニメーションが台無しになりました。ユーザーにぶら下がってぎくしゃくするように-私たちが望んでいたことではありません....Akkuが述べたように、データの表示方法を変更する以外に、これに対する解決策は見当たりません。

于 2013-02-19T07:27:08.993 に答える