投稿者 魔界の仮面弁士  (社会人) 投稿日時 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 することになります。