1

vb 2008 でアプリケーションを開発しており、バックグラウンド ワーカーを使用してファイルをコピーしています。コピーとともにフォームの上部でアニメーションを再生する独自の設計フォームがあります。「AxMSComCtl2.AxAnimation」を使用してアニメーションを再生するには、実行時に取得します

「現在のスレッドがシングル スレッド アパートメントにないため、ActiveX コントロール '' をインスタンス化できません。」

検索でリンクを見つけました:フォーラムリンク

しかし、まだこのリンクでは、まずこのスニペットを挿入する場所と、バックグラウンドワーカーでアイデアを実装する方法がわかりません。

この点で私を導いてください。

ありがとうございます。それでは、お元気で、

マーベリック。

4

2 に答える 2

1

BackgroundWorker を使用してこのコントロールをアニメーション化することはできません。これは ActiveX コントロールであり、アプリのメイン スレッドで作成する必要があります。フォームを作成するのと同じスレッド。

これは、一般的なコントロールの非常に一般的な制限であり、スレッド化をサポートしていません。

リンクされたスレッドは問題を解決しません。はい、SetApartmentState() を呼び出して STA を指定することにより、独自の STA スレッドを作成できますが、メイン スレッドで作成したフォームに対しては何もできません。コントロールをフォームに追加すると、例外が発生します。フォームの子コントロールは、フォームと同じスレッドで作成する必要があります。

通常、これは問題になりません。フォームのイベント ハンドラーを短く、きびきびと保つ限り、アニメーションは適度にスムーズになるはずです。このようなイベント ハンドラーが、時間がかかる (結果としてアニメーションがフリーズする) 何かを行う必要がある場合は、BGW にそのジョブを実行させます。

于 2010-09-21T13:26:18.970 に答える
0

デリゲートを使用し、メイン スレッドで実際にアニメーションを制御する必要があります。バックグラウンド スレッドからデリゲートを呼び出しますが、メイン スレッドで実行されます。このページ、2 番目の投稿には大まかなアイデアがあります: http://www.vbforums.com/showthread.php?t=377205

于 2010-09-21T21:40:50.627 に答える