通过参数从线程更新UI元素

时间:2019-05-27 11:58:17

标签: vb.net

我正在尝试使用此代码从一个单独的线程更新标签,但是它不起作用。有人可以帮我修改此功能,以便我可以在单独的线程中调用它吗?

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

1 个答案:

答案 0 :(得分:0)

您可以使用Invoke(如果需要立即使用)或BeginInvoke(在下一个绘画事件中)。

Me.BeginInvoke(Sub()
                 Label5.Text = email
                 Label6.Text = message1
               End Sub)

您可以将其放在使用标签进行工作的线程/ Sub中,而无需其他子。