Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
BackgroundWorkerで「ソースは利用できません。」となることについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30201#CommentId82653
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2016/12/12 11:09:14
> 時間のかかる処理を、バックグランドで処理させようとしています。
COM コンポーネントの Shell オブジェクトを利用していますが、
これの ThreadingModel は Apartment となっています。
すなわち、シングルスレッドアパートメント(STA)からしか呼び出せない仕様です。
一方、BackgroundWorker で生成されるスレッドは、常に
マルチスレッドアパートメント(MTA)です。そのため、
BackgroundWorker 内から Shell オブジェクトを使うことはできません。
ひとまず、
Debug.Print( System.Threading.Thread.CurrentThread.GetApartmentState().ToString() )
の内容を確認してください。Shell を呼びたいなら、これが STA でなければなりません。
そして STA なスレッドを用意したいのであれば、BackgroundWorker は使えません。
代わりに、New Thread で生成したスレッドを SetApartmentState することになります。