我正在尝试使用以下代码在我的 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 ...
我在谷歌和 SO 上的搜索没有给我关于这段代码的任何结果。
这可能是什么原因,为什么它不是每次都发生或从不发生,而只是有时在开始项目时发生?
编辑:我的线程布局:
- 主线程
- 开始
Game.Run
- 在单独的项目中启动网络初始化程序(在
Initialize
) - 为网络 I/O 启动一个新线程
当创建一个只包含的新项目时Keyboard.GetState()
,我显然得到一个错误代码0
,它转换为
ERROR_SUCCESS
0 (0x0)
操作成功完成。
请参阅下面的屏幕截图,我不知道为什么成功会触发InvalidOperationException
.