6

コードに次のメソッドがあります。

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

この2つの呼び出しの違いは何ですか:

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 に答える