vb.net - 通过参数从线程更新 UI 元素
问题描述
我正在尝试使用此代码从单独的线程更新标签,但它不起作用。有人可以帮我修改这个函数,以便我可以从一个单独的线程中调用它吗?
Public Class Threader
Private Sub message_UI_Update(email As String, message1 As String)
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf message_UI_Update), email, message1)
Else
Label5.Text = email
Label6.Text = message1
End If
End Sub
End Class
- 更新 -
经过一些研究,我能够用这段代码实现这一点。我希望我使用正确的方法。
Public Class Threader
Public Delegate Sub mydelegate(str As String, message1 As String)
Private Sub message_UI_Update(email As String, message1 As String)
If Me.InvokeRequired Then
Me.Invoke(New mydelegate(AddressOf message_UI_Update), email, message1)
Else
Label5.Text = email
Label6.Text = message1
End If
End Sub
End Class
解决方案
您可以像这样使用 Invoke(如果您立即需要它)或 BeginInvoke(在下一个绘画事件上)。
Me.BeginInvoke(Sub()
Label5.Text = email
Label6.Text = message1
End Sub)
你可以把它放在你使用标签的线程/子中,你不需要额外的子。