VB.Net 多线程 InvokeRequired 和传递线程

VB.Net Multi-Threading InvokeRequired and Passing Thread

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

到目前为止我有这个:

 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()'.

我希望这只是一个语法问题,但我似乎无法让它发挥作用。有什么方法可以在不破坏 invokerequired 检查的情况下传递这个线程名称吗?

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

Me.GroupNamehere.Invoke(New MethodInvoker(AddressOf BrowserSub(BrowserSpawn)))

它告诉我Addressof operand 必须是一个方法的名称(没有括号)。虽然没有括号它也不开心所以我不知道从这里去哪里。

/编辑:

偶然发现

这似乎证实了我正在尝试传递类似以下内容的内容:

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)

GroupName.Invoke(New MethodInvoker(Sub() Me.SubName(ThreadName)))