コードに次のメソッドがあります。
Private Sub Display()
Received.AppendText(" - " & RXArray)
End Sub
この2つの呼び出しの違いは何ですか:
Me.Invoke(New MethodInvoker(AddressOf Display))
と
Display()
それがスレッドに関するものであることは知っていますが、よくわかりません。
前もって感謝します
コードに次のメソッドがあります。
Private Sub Display()
Received.AppendText(" - " & RXArray)
End Sub
この2つの呼び出しの違いは何ですか:
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