代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

VB.NET中的Me.Invoke实际上并不“Invoke”——线程在Invoke语句上暂停

  •  5
  • SqlRyan  · 技术社区  · 14 年前

    我有以下代码:

    Public Delegate Sub SetStatusBarTextDelegate(ByVal StatusText As String)
    Private Sub SetStatusBarText(ByVal StatusText As String)
        If Me.InvokeRequired Then
            Me.Invoke(New SetStatusBarTextDelegate(AddressOf SetStatusBarText), StatusText)
        Else
            Me.labelScanningProgress.Text = StatusText
        End If
    End Sub
    

    有没有想过为什么线程似乎害怕调用?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Guffa    14 年前

    Invoke方法将消息放入消息队列中,以在主线程中执行方法调用。这意味着您需要一个带有消息泵的主线程。如果主线程正忙,或者在没有消息泵的应用程序(例如控制台应用程序)中执行此操作,则消息将只保留在队列中。