使用VB.net的多线程引发错误

时间:2013-05-09 15:52:32

标签: vb.net multithreading winforms

vb.net多线程新手。

如果我做错了什么,请复活我。

我正在尝试做什么:

用户需要将序列号放入文本框,然后程序需要在用户点击搜索按钮时从供应商网站中选择型号和保修信息。

我的Windows窗体有两个文本框和两个webbrowsers,然后是一个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'无法实例化,因为当前线程不在单线程单元中。

如果你说出我做错了什么,需要做什么以及所有

,那将会很棒

由于 Sathish所在

1 个答案:

答案 0 :(得分: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()