質問

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

「ActiveX Control」は、現在のスレッドが単一のスレッドアパートメントにないため、インスタンス化することはできません。」

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

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

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

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

マーベリック。

役に立ちましたか?

解決

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

他のヒント

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top