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)))
我需要能够将线程名称传递给子例程,以便在需要时中止它。
到目前为止我有这个:
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)))