首页 > 解决方案 > 通过参数从线程更新 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

标签: vb.net

解决方案


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

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

你可以把它放在你使用标签的线程/子中,你不需要额外的子。


推荐阅读