Это зависит от вашего контекста вызова.
Если вы вызываете его из потока пользовательского интерфейса или основного потока, тогда да, он будет работать синхронно.
Если вы вызываете это из потока, который не является вашим пользовательским интерфейсом или основным потоком, он будет работать асинхронно с вашим пользовательским интерфейсом или основным потоком, но синхронно с вызывающим потоком, ожидая завершения пользовательского интерфейса или основного потока обработки делегата.
Так что это может идти в обоих направлениях. Он может работать синхронно и асинхронно. Я думаю, что вам не хватает того, что сам код не преформируется синхронно или асинхронно, выполнение кода либо синхронно, либо асинхронно.
Причина, почему вы делаете функцию обновления:
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
ли так, что вы можете назвать это всякий раз, когда вы хотите изменить текст, без необходимости беспокоиться о исключении перекрестного потока.
Этот метод можно было бы безопасно вызывать из потока пользовательского интерфейса во время события клика, а также было бы безопасно звонить из бегущего фонового потока, поскольку изменение все равно будет выполняться только в пользовательском интерфейсе или основном потоке. Вы используете такой код, чтобы обеспечить синхронизацию с вашими изменениями в элементах управления, принадлежащих другим потокам.
Этот стиль обновления предназначен для синхронизации ваших изменений и предотвращения перекрестной резьбы.
Я смущен. Каков ваш реальный вопрос? –
Вы хотите знать, может ли этот код работать с несколькими потоками, используя его без проблем? – Simon