【发布时间】:2013-11-16 04:12:49
【问题描述】:
我正在尝试使用以下代码在我的 XNA 应用程序中获取键盘状态:
this.OldKeyboard = this.NewKeyboard;
this.NewKeyboard = Keyboard.GetState();
this.OldMouse = this.NewMouse;
this.NewMouse = Mouse.GetState();
但是,有时(我认为大约 60%)当我开始游戏时,我会收到带有以下消息的 InvalidOperationException:
An invalid operation occurred when trying to query the keyboard state.
The result code was 126.
at Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex playerIndex)
at Microsoft.Xna.Framework.Input.Keyboard.GetState()
at GameLib.GameBase.Update(GameTime gameTime) in MY_PATH\GameLib\GameLib\GameBase.cs:Line 58.
at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
at ...
我在 google 和 SO 上的搜索没有给我关于此代码的任何结果。
这可能是什么原因,为什么它不是每次都发生或从不发生,但只是在启动项目时有时?
编辑:我的线程布局:
- 主线程
- 开始
Game.Run - 在单独的项目(
Initialize)中启动网络初始化程序 - 为网络 I/O 启动一个新线程
当创建一个只包含 Keyboard.GetState() 的新项目时,我显然得到了一个错误代码 0,它转换为
ERROR_SUCCESS
0 (0x0)
操作成功完成。
看我下面的截图,我不知道为什么成功会触发InvalidOperationException。
【问题讨论】:
-
您是否在主线程中执行该代码?因为它是必需的.. 你应该在更新方法中执行该代码
-
@Blau:是的,我在我的
Main方法开始的游戏的更新方法中调用它。但是,我在Game.Initialize的某个时间点创建了一个网络线程,这可能是错误的原因吗?如果是,我将如何在没有此错误的情况下启动另一个线程?
标签: c# xna keyboard invalidoperationexception