最近,我在用vb.net编写一个学校项目应用程序。
我在用XInput方法添加对我的Joystick的支持时遇到了问题。我在http://www.codeproject.com/Articles/492473/Using-XInput-to-access-an-Xbox-Controller-in-M上找到了密码?
但是它有一个小错误,我想:当Joystick.StateChanged事件引发时,我在我的MainWindow类上调用一个Sub,但是它说:调用线程不能访问这个对象,因为另一个线程拥有它。
Public WithEvents XJoy As XboxController = Nothing
Public ReadOnly Property XInputJoy As XboxController
Get
Return XJoy
End Get
End Property
Public Sub JoystickStateChanged(sender As Object, e As XboxControllerStateChangedEventArgs) Handles XJoy.StateChanged
If XJoy.IsXPressed Then
VV1()
End If
End Sub
Public Sub VV1()
TEST1_Text.Text = "X Pressed"
End Sub
Public Sub WindowLoaded()
XJoy = XboxController.RetrieveController(0)
XboxController.StartPolling()
If XJoy.IsConnected Then
MessageBox.Show("Found Joystick In XInput Mode !")
End If
End Sub注意,Xinput是基于轮询的,我们必须使用运行在另一个线程上的轮询循环。但是如何在这个线程和我的主窗口(调用一个Sub)之间创建连接呢?
非常感谢,很抱歉我的英语很差
我正在使用Visual 2012,我的Joystick类似于XBox (XInput支持)。
发布于 2014-08-17 21:34:18
我假设您使用的是WPF,在这种情况下,您需要在UI线程上设置.Text属性。您可以使用Dispatcher.BeginInvoke进行此操作,即
Public Sub VV1()
Me.Dispatcher.BeginInvoke(Sub() TEST1_Text.Text = "X Pressed")
End Sub或者通过Dispatcher调用VV1函数:
Public Sub JoystickStateChanged(sender As Object, e As XboxControllerStateChangedEventArgs) Handles XJoy.StateChanged
If XJoy.IsXPressed Then
Me.Dispatcher.BeginInvoke(VV1)
End If
End Subhttps://stackoverflow.com/questions/25349877
复制相似问题