VB.NET中的Me.Invoke实际上并不“调用” – 线程在Invoke语句中停止

我有以下代码

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的任何想法?

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐