バックグラウンドワーカーでアニメーションを実行します
-
04-10-2019 - |
質問
VB 2008でアプリケーションを開発し、バックグラウンドワーカーを使用してファイルをコピーしています。コピーとともにフォームの上部にアニメーションを再生する独自の設計フォームがあります。 「axmscctl2.axanimation」を使用してアニメーションIMをプレイするために、実行時に私は取得します
「ActiveX Control」は、現在のスレッドが単一のスレッドアパートメントにないため、インスタンス化することはできません。」
検索でリンクを見つけました:フォーラムリンク
しかし、このリンクでは、まずこのスニペットを挿入する場所と、バックグラウンドワーカーにアイデアを実装する方法を理解していません。
この点で私を導いてください。
ありがとうございます。それでは、お元気で、
マーベリック。
解決
デリゲートを使用して、メインスレッドに実際にアニメーションを制御する必要があります。バックグラウンドスレッドからデリゲートを呼び出しますが、メインスレッドで実行されます。このページ、2番目の投稿には、大まかなアイデアがあります。http://www.vbforums.com/showthread.php?t=377205
他のヒント
バックグラウンドワーカーを使用してこのコントロールをアニメーション化することはできません。 ActiveXコントロールであり、アプリのメインスレッドで作成する必要があります。フォームを作成する同じスレッド。
これは、一般的にコントロールにとって非常に一般的な制限であり、スレッド化をサポートしていません。
リンクされたスレッドは問題を解決しません。はい、SetPartmentState()を呼び出してSTAを指定することで独自のSTAスレッドを作成できますが、メインスレッドで作成したフォームでは何もできません。フォームにコントロールを追加すると、例外が表示されます。フォームの子コントロールは、フォームと同じスレッドで作成する必要があります。
これは一般に問題ではないはずです。フォームのイベントハンドラーを短くてきれいに保つ限り、アニメーションはかなりスムーズでなければなりません。そのようなイベントハンドラーが時間がかかる(そして結果としてアニメーションをフリーズする)何かをする必要がある場合、BGWにそのジョブを実行させます。