Me.Invoke в VB.NET на самом деле не "Invoke" - потоки останавливаются в операторе Invoke - PullRequest
5 голосов
/ 17 марта 2010

У меня есть следующий код:

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?

1 Ответ

5 голосов
/ 17 марта 2010

Метод Invoke помещает сообщение в очередь сообщений для выполнения вызова метода в главном потоке. Это означает, что вам нужен основной поток с насосом сообщений. Если основной поток занят, или если вы делаете это в приложении без насоса сообщений (например, консольное приложение), сообщение просто останется в очереди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...