我有以下代码:
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
问题在于,当我从另一个线程调用“SetStatusBarText”子时,InvokeRequired为True(应该是),但是我的线程在Me.Invoke语句中停止 - 暂停执行显示它们都坐在那里,实际上并没有调用任何东西。
关于为什么线程似乎害怕Invoke的任何想法?
答案 0 :(得分:5)
Invoke方法在消息队列中放入一条消息,以在主线程中执行方法调用。这意味着您需要一个带消息泵的主线程。如果主线程忙,或者如果您在没有消息泵的应用程序(例如控制台应用程序)中执行此操作,则该消息将保留在队列中。