簡単な例を次に示します。他の言語より少し難しいかもしれませんが、それほど複雑ではありません。次のコードは、それがフォーム クラス内にあることを前提としています (そうでない場合は、何らかのコントロールまたはフォーム参照を使用して を呼び出す必要がありますInvoke
)。
Private Sub beginDoWork()
Dim thread As New Thread(AddressOf DoWork)
thread.Start()
End Sub
Public Sub DoWork()
Dim result As String = getStringFromRemoteServer()
workCompleted(result)
End Sub
Private Delegate Sub workCompletedDelegate(result As String)
Private Sub workCompleted(result As String)
If InvokeRequired Then
Invoke(New workCompletedDelegate(AddressOf workCompleted(result)
Exit Sub
End If
Label1.Text = result
End Sub
これは、呼び出しが必要かどうかを確認するのではなく、DoWork
常に呼び出しInvoke
から呼び出しを行うことでさらに簡素化できますが、UI スレッドではなく UI スレッドで作業を行う場合、私が書いた方法はもう少しカプセル化されて効率的です。ワーカー スレッド。workCompleted
workCompleted