VB.Net多线程调用所需线程和传递线程

VB.Net多线程调用所需线程和传递线程,vb.net,multithreading,invoke,Vb.net,Multithreading,Invoke,我需要能够将线程名传递到子例程中,以便在需要时中止它 到目前为止,我有一个: Dim BrowserSpawn As New System.Threading.Thread(AddressOf BrowserSub) BrowserSpawn.Start() Private Async Sub BrowserSub(BrowserSpawn) ... End Sub 因为子例程在Form1组中创建了一个浏览器,所以我需要在子例程中调用对这些控件的访问 注意:当我不传递线程名称时,

我需要能够将线程名传递到子例程中,以便在需要时中止它

到目前为止,我有一个:

 Dim BrowserSpawn As New System.Threading.Thread(AddressOf BrowserSub)
    BrowserSpawn.Start()

 Private Async Sub BrowserSub(BrowserSpawn)
...
End Sub
因为子例程在Form1组中创建了一个浏览器,所以我需要在子例程中调用对这些控件的访问

注意:当我不传递线程名称时,这可以正常工作。

 If Me.GroupNamehere.InvokeRequired Then
            Me.GroupNamehere.Invoke(New MethodInvoker(AddressOf BrowserSub))
        Else
           'Do nothing
        End If
当我传入线程名称时,在尝试编译时,这些名称会成为一个问题:

Method does not have a signature compatible with delegate 'Delegate Sub MethodInvoker()'.
我希望这只是一个语法问题,但我似乎无法让它发挥作用。是否有任何方法可以在不破坏invokererequired检查的情况下传入此线程名称

如果我尝试将其更改为显而易见的:

Me.GroupNamehere.Invoke(New MethodInvoker(AddressOf BrowserSub(BrowserSpawn)))
它告诉我Addressof操作数必须是方法的名称(不带括号)。虽然没有括号,我也不高兴,所以我不知道该怎么办

/编辑:

偶然发现

这似乎证实了我试图通过的东西,比如:

Private Sub test2(Threadname As Thread)
    ' Do something
End Sub
潜艇似乎对此很满意。但我不知道如何在不破坏调用程序部分的情况下做到这一点

 Me.GroupNameHere.Invoke(New MethodInvoker(AddressOf SubNameHere))

工作正常。如果SubNameHere()变为SubNameHere(threadname as thread),那么这似乎很好,但调用行中断,只需要的地址。

两个轻微的语法更改将其排序:

Private Async Sub SubName(ThreadNameAs Thread)


定义子对象时,
()
中的部分用于定义不传递对象的参数<代码>公共子Foo(fubar作为字符串)除非我缺少MSDN所说的可以传递对象的内容?宣言中没有!调用时将对象传递给它
Foo(“something”)
我尝试调用线程并传入线程名称,如browsersawn.Start(browsersawn),但如果子线程只是BrowserSub(),则它不使用它。如果它是BrowserSub(BrowserSpawn),那么使用线程似乎没有问题,但它破坏了调用程序代码。
GroupName.Invoke(New MethodInvoker(Sub() Me.SubName(ThreadName)))