我需要能够将线程名称传递给子程序,以便在需要时中止它。
所以到目前为止我有这个:
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操作数必须是方法的名称(没有括号)。虽然没有括号但它也不开心,所以我不知道从哪里去。
/编辑:
偶然发现How can I create a new thread AddressOf a function with parameters in VB?
这似乎证实了我尝试传递的内容如下:
Private Sub test2(Threadname As Thread)
' Do something
End Sub
这个子似乎很高兴。但是我不确定如何在不破坏调用者部分的情况下做到这一点。
Me.GroupNameHere.Invoke(New MethodInvoker(AddressOf SubNameHere))
正常工作。如果SubNameHere()成为SubNameHere(threadname作为线程),那么看起来很开心但调用行中断并且不需要超过地址。
答案 0 :(得分:-1)
两个轻微的语法更改对其进行了排序:
Private Async Sub SubName(ThreadNameAs Thread)
和
GroupName.Invoke(New MethodInvoker(Sub() Me.SubName(ThreadName)))