Скорее всего, потому что элемент управления еще не был создан при попытке доступа к нему. Подождите, пока элемент управления не загрузится, или проверьте его, используя Label.Created
. Вот так:
Public Sub SetTextBoxText_ThreadSafe(ByVal Label As TextBox, ByVal text As String)
<b>If Label.Created Then</b>
If Label.InvokeRequired Then
MsgBox("invoke")
Dim MyDelegate As New SetTextBoxText_Delegate(AddressOf SetTextBoxText_ThreadSafe)
Me.Invoke(MyDelegate, New Object() {Label, text})
Else
MsgBox("noinvoke")
Label.Text = text
End If
<b>End If</b>
End Sub
P.S. Вам не нужен пользовательский тип делегата, просто используйте Action(Of TextBox, String)
. Вам также не нужны квадратные скобки вокруг Label
или text
.