0

vb.net マルチスレッドは初めてです。

私が何か間違ったことをしているなら、私を直してください。

私がやろうとしていること:

ユーザーはシリアル番号をテキストボックスに入力する必要があり、ユーザーが検索ボタンを押したときに、プログラムはベンダーの Web サイトからモデルと保証情報を選択する必要があります。

私のウィンドウフォームには、2 つのテキストボックスと 2 つの Web ブラウザ、そして 1 つの datagridview コントロールがあります。

私がやろうとしているのは、ユーザーが検索ボタンを押したときです。コードは以下のことを行う必要があります

Thread1: textbox1 からシリアル番号を選択し、webbrowser1 を使用して Web から情報を取得する必要があります Thread2: textbox2 からシリアル番号を選択し、webbrowser2 を使用して Web から情報を取得する必要があります

私のコードは次のようになります

Dim thread1 As System.Threading.Thread
Dim thread2 As System.Threading.Thread

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)          Handles Button1.Click

    thread1 = New System.Threading.Thread(AddressOf thread11)
    thread1.Start()

    thread2 = New System.Threading.Thread(AddressOf thread22)
    thread2.Start()

   End Sub

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles       MyBase.Load
    Me.CheckForIllegalCrossThreadCalls = False
End Sub

 Sub thread11()
 ' Takes the serial no from text1 and searches the information using webbrowser1 goes here
end sub 

Sub thread22()
 ' Takes the serial no from text2 and searches the information using webbrowser2 goes here
  end sub 

しかし、コードをデバッグすると、以下のエラーメッセージが表示されます

フォームの作成中にエラーが発生しました。詳細については、Exception.InnerException を参照してください。エラー: 現在のスレッドがシングルスレッド アパートメントにないため、ActiveX コントロール '8856f961-340a-11d0-a96b-00c04fd705a2' をインスタンス化できません。

私が間違っていること、何をする必要があるかなどを教えていただければ幸いです

ありがとう

4

1 に答える 1

2

スレッドを作成するときは、アパートメント状態を設定してみてください。

thread1 = New System.Threading.Thread(AddressOf thread11)
thread1.SetApartmentState(ApartmentState.STA)
thread1.Start()

thread2 = New System.Threading.Thread(AddressOf thread22)
thread2.SetApartmentState(ApartmentState.STA);
thread2.Start()
于 2013-05-09T16:47:11.000 に答える