我的代码中有这个方法:
Private Sub Display()
Received.AppendText(" - " & RXArray)
End Sub
这两个电话有什么区别:
Me.Invoke(New MethodInvoker(AddressOf Display))
和
Display()
我知道这是关于线程的,但我不确定。
提前致谢
我的代码中有这个方法:
Private Sub Display()
Received.AppendText(" - " & RXArray)
End Sub
这两个电话有什么区别:
Me.Invoke(New MethodInvoker(AddressOf Display))
和
Display()
我知道这是关于线程的,但我不确定。
提前致谢
Invoke
当你在不同的线程中工作时使用这种方式。例如,如果调用者与 GUI 不在同一个线程中。
如果调用者不需要等待方法的结果,你甚至可以使用BeginInvoke
:
GuiObject.BeginInvoke(New MethodInvoker(AddressOf Display))
或更短:
GuiObject.BeginInvoke(Sub() Display)
为了更便于编写,您可以将调用移至Display
函数中:
Private Sub Display()
If Me.InvokeRequired Then
Me.Invoke(Sub() Display)
Return
End IF
Received.AppendText(" - " & RXArray)
End Sub
这样调用者就不必知道他是否在同一个线程中。
将参数添加到另一个答案:
Private Sub Display(ByVal strParam As String)
If Me.InvokeRequired Then
Me.Invoke(Sub() Display(strParam))
Return
End IF
Received.AppendText(" - " & RXArray)
End Sub
对于未来的读者,您还可以通过执行以下操作来更新您的 UI 对象
Private Sub Display()
If Me.InvokeRequired Then
Me.Invoke(Sub() Received.AppendText(" - " & RXArray))
Return
End IF
End Sub