0

gif を読み込んで同時にユーザーコントロールを読み込もうとするたびにプログラムが遅れるため、マルチスレッドが必要なため、Google を見回しました。むしろ、GIF がハングし、ページに遷移なしで突然ユーザー コントロールが表示されます。プログラムがどのように動作するか、

GIF を表示 -> ユーザーコントロールをロード -> Gif を非表示 -> アニメーションを実行 (単純なスライドが有効)

しかし、ユーザー コントロールの ui 要素をレンダリングするときの遅延のため、プログラムは次のように動作します。

Gif を表示 -->Gif がハング (またはフリーズ) --> ユーザー コントロールをすぐに表示

だから私は BackgroundWorker と呼ばれるものを見つけました。いいね 。まあ...完全ではありません。私はそれを試して、私のコードに適用しました

        BackgroundWorker worker = new BackgroundWorker();
        CrowdWatch_Portrait.CrowdWatch crowder;
        //The page is a frame fyi
        thePage.LoadCompleted += new LoadCompletedEventHandler(thePage_LoadCompleted);

        worker.DoWork += delegate(object s, DoWorkEventArgs args)
        {

                crowder = new CrowdWatch_Portrait.CrowdWatch();
                thePage.Content = crowder;

        };


        worker.RunWorkerAsync();

いいですね。実行しました。失敗した。それは私にこのエラーを与えました

多くの UI コンポーネントがこれを必要とするため、呼び出しスレッドは STA でなければなりません。

そのため、オンラインで再度調査したところ、このクラスを使用してユーザーコントロールをロードするシナリオは見つかりませんでした。だから私は助けを求めてコミュニティに頼ります....助けますか?

4

2 に答える 2

0

このようにUIディスパッチャーでページコンテンツを設定してみてください-

App.Current.Dispatcher.BeginInvoke((Action)delegate{ thePage.Content = crowder; });
于 2012-07-31T07:46:02.990 に答える
0

正確な理由は覚えていませんが、私のプログラムの 1 つで、同じエラーに直面しました。私はこのコードで解決しました:

_wakeupthread.SetApartmentState(System.Threading.ApartmentState.STA);

それが助けになることを願っています:-)

于 2012-07-31T06:35:31.553 に答える