在多线程类中引发事件?

Jim*_*Jim 1 vb.net visual-studio-2005

在多线程类中引发事件?

我正在运行一个类(游戏手柄处理程序),它使用许多子线程来检查键输入等,然后它将事件引发到我的表单以解决所需的反应,是否有办法使事件在同一个线程上引发班级本身.

AMi*_*ico 6

最简单的答案是"只是在当前线程上引发事件".由表单处理事件然后使用表单的线程执行任何更新Control.Invoke.

以下是更新从另一个线程Label调用的控件的推荐方法__message.

将以下代码添加到窗体.

Delegate Sub SetTextDelegate(ByVal message As String)

Public Sub SetText(ByVal message As String)
    If __message.InvokeRequired Then
        Dim oCall As New SetTextDelegate(AddressOf SetText)
        Me.Invoke(oCall, New Object() {message})
    Else
        __message.Text = message
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

然后调用形式.SetText(<messageToDisplay>)在需要的地方.

您可以使用Control.InvokeControl.BeginInvoke方法.有关Control.InvokeRequired更多信息,请参阅财产