6

我的代码中有这个方法:

Private Sub Display()
        Received.AppendText(" - " & RXArray)
End Sub

这两个电话有什么区别:

Me.Invoke(New MethodInvoker(AddressOf Display))

Display()

我知道这是关于线程的,但我不确定。

提前致谢

4

3 回答 3

11

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

这样调用者就不必知道他是否在同一个线程中。

于 2013-07-23T11:57:39.157 回答
3

将参数添加到另一个答案

Private Sub Display(ByVal strParam As String)
    If Me.InvokeRequired Then
        Me.Invoke(Sub() Display(strParam))
        Return
    End IF
    Received.AppendText(" - " & RXArray)
End Sub
于 2015-04-29T21:51:38.430 回答
1

对于未来的读者,您还可以通过执行以下操作来更新您的 UI 对象

Private Sub Display()
    If Me.InvokeRequired Then
        Me.Invoke(Sub()  Received.AppendText(" - " & RXArray))
        Return
    End IF

End Sub
于 2018-04-08T13:41:12.580 回答