5

私は次のコードを持っています:

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 を恐れているように見える理由について何か考えはありますか?

4

1 に答える 1

5

Invoke メソッドはメッセージをメッセージ キューに入れ、メイン スレッドでメソッド呼び出しを実行します。これは、メッセージ ポンプを備えたメイン スレッドが必要であることを意味します。メイン スレッドがビジーの場合、またはメッセージ ポンプのないアプリケーション (コンソール アプリケーションなど) でこれを実行している場合、メッセージはキューに残ります。

于 2010-03-16T21:54:54.567 に答える