|
分類:[VB.NET/VB2005 以降]
VB2008 Windows Formアプリケーション
HTMLデータを読み込み、解析・加工する処理を作成したのですが、 これをBackGroundWorkerで非同期処理すると、ThreadStateExceptionが発生しました。
"現在のスレッドはシングル スレッド アパートメントでないため、ActiveX コントロール '8856f961-340a-11d0-a96b-00c04fd705a2' をインスタンス化できません。"
原因は、HTMLデータ解析・加工の際にWebBrowserコントロールを使っているためです。 BackGroundWorker内でWebBrowserの新規インスタンスを作成したとしても、 BackGroundWorkerがMTAであるため、今回の例外が発生することが分かりました。
これを解決するためには、非同期スレッドをThreadクラスで実装し、 このスレッドのApartmentStateをSTAにすれば良さそうですが、 果たしてこれが正しい使い方なのかどうか分かりません。
そこで質問ですが、 (1)上記のように、非同期用のThreadクラスでApartmentStateをSTAとするやり方は「あり」なのでしょうか? あるいは、非同期スレッドでWebBrowserを使うという考えは間違っているのでしょうか?
(2)そもそも非同期スレッドでWebBrowserを使っている理由は、 指定したHTMLタグ種類のコレクション取得が容易であったり タグの属性の取得・設定が容易であるためです。 WebBrowserを使わなくとも、上記を容易に処理できる方法はないでしょうか?
以上、宜しくお願いします。
|