|  | 分類:[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を使わなくとも、上記を容易に処理できる方法はないでしょうか?
 
 以上、宜しくお願いします。
 
 |