Vb.net 避免了跨线程异常,但GUI不是';t更新

Vb.net 避免了跨线程异常,但GUI不是';t更新,vb.net,multithreading,thread-safety,backgroundworker,Vb.net,Multithreading,Thread Safety,Backgroundworker,我有一个线程需要更新Windows窗体。使用此处的代码: 以避免交叉线程异常 我已经更新了控件,但是GUI没有刷新以显示新值。为了确认它们正在更新,我正在读取它们的值,设置它们,然后再次读取它们,并在这两种情况下打印出结果 以下是我的代码(包含在线程库中),用于添加自定义事件,我可以使用该事件触发对任何控件的线程安全更新: Imports System.ComponentModel Imports System.Runtime.CompilerServices Public Module M

我有一个线程需要更新Windows窗体。使用此处的代码:

以避免交叉线程异常

我已经更新了控件,但是GUI没有刷新以显示新值。为了确认它们正在更新,我正在读取它们的值,设置它们,然后再次读取它们,并在这两种情况下打印出结果

以下是我的代码(包含在线程库中),用于添加自定义事件,我可以使用该事件触发对任何控件的线程安全更新:

Imports System.ComponentModel
Imports System.Runtime.CompilerServices

Public Module MyInvoke
    <Extension()>
    Public Sub CustomInvoke(Of T As ISynchronizeInvoke)(ByVal control As T, ByVal toPerform As Action(Of T))
        If control.InvokeRequired Then
            control.Invoke(toPerform, New Object() {control})
        Else
            toPerform(control)
        End If
    End Sub
End Module
此代码更改文本,但不会在GUI中更新-它仍然显示为“Label1”。如果我再次触发线程,它将正确读取更改的值(Hello World),但它在GUI中仍然没有更新(仍然显示Label1)

我尝试过刷新它:Form1.Label1.CustomInvoke(Sub(l)l.Refresh()),但没有成功。我做错了什么

TIA

像这样试试

    Label1.CustomInvoke(Sub() Label1.Text = "hello")
像这样试试

    Label1.CustomInvoke(Sub() Label1.Text = "hello")