呼び出しコンテキストに大きく依存します。
UI スレッドまたはメイン スレッドから呼び出している場合は、同期的に機能します。
UI またはメイン スレッドではないスレッドから呼び出すと、UI またはメイン スレッドに対して非同期に機能しますが、呼び出し元のスレッドとは同期的に機能し、UI またはメイン スレッドがデリゲートの処理を完了するまで待機します。
したがって、それは双方向に行くことができます。同期および非同期で動作できます。あなたが見逃しているのは、コード自体が同期または非同期の方法で実行されず、コードの実行が同期または非同期のいずれかであるということだと思います。
update 関数を作成する理由:
Private Sub UpdateLabel(byval tLabel as Label, byval Value as String)
If tLabel.Invokerequired Then
Me.Invoke(New MethodInvoker(AddressOf UpdateLabel)
Else
tLabel.Text = Value
End If
End Sub
クロススレッド例外を心配することなく、テキストを変更したいときにいつでも呼び出すことができるようにするためです。
このメソッドは、クリック イベント中に UI スレッドから安全に呼び出すことができます。また、実行中のバックグラウンド スレッドから安全に呼び出すこともできます。これは、変更が UI またはメイン スレッドでのみ行われるためです。このようなコードを使用して、他のスレッドが所有するコントロールへの変更との同期を確保します。
このスタイルの更新は、変更を同期し、クロススレッドを回避することを目的としています。