我在Windows 7 x64上安装了VS 2008的XNA 3.1应用程序。如果游戏没有焦点(有时!),窗口将变为灰色~7秒。标题添加了Not Responding
。如果游戏具有焦点,则窗口可能会略微改变屏幕上的位置,托盘上的应用程序图标会移动,就像打开新程序一样。
这仅在瞬间发生,然后应用程序图标移回其原始位置。它在调试和释放模式下执行此操作。这很奇怪,因为就我所知,应用程序并没有停留在任何循环中。如果我进入VS并在代码没有响应时暂停代码,它会向我显示Program类中的Instance.Run。我试着在那个确切的时刻暂停它;
调用堆栈如下所示: [在睡觉,等待或加入]
外部代码。 - >
mscorlib.dll!System.Threading.Thread.Sleep(int millisecondsTimeout)+ 0x5 bytes Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.Tick()+ 0x98 bytes
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.HostIdle(对象发送者... Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.GameHost.OnIdle()+ 0x3d bytes
......等等。
如果我在暂停时点击运行,该程序将工作并解冻。一旦进入这种非响应模式,应用程序将不会解冻。所有声音在没有响应时继续工作。
此外,我有一个覆盖OnDeactivated()
事件的方法,当应用程序失去响应时它会被调用,即使应用程序将具有焦点。我已经尝试为我的显卡安装最新的驱动程序,但无法解决此问题。运行没有VS的可执行文件时也会发生此问题。就像我说的那样,这个问题在75%的时间内都会发生......否则它会正常工作。
我发现只有一篇关于此问题的论坛帖子: http://forums.create.msdn.com/forums/p/56743/346180.aspx
It looks like it was never resolved.
答案 0 :(得分:4)
原来我在Update()方法中检查Mediaplayer.State,由于我的分析器,我发现了这个问题。 MediaPlayer.State是一个昂贵的enum来检索,一旦我删除了它,它就不再挂起了。
答案 1 :(得分:0)
这听起来像是一个相当奇怪的问题......唯一让人想到的是,应用程序可能没有优雅地处理设备的丢失。我知道这很模糊,但也许它可能是一个暗示。查看所有内容加载例程(特别是如果您手动创建任何资源而不是通过内容管道...查看DeviceLost事件等。
一些附加信息:查看XNA团队发布的关于如何正确处理资源和设备丢失/重置事件的博文:http://blogs.msdn.com/b/xna/archive/2006/09/18/761355.aspx
更多信息: forum post我在上面的链接中有一个很好的引用来自Shawn Hargreaves,这就是为什么我认为这可能与您遇到的内容有关:< / p>
设备丢失和设备重新创建 不同的东西。自动游泳池 资源将在设备丢失后存活 但需要在任何时候重新创建 设备重新创建。
设备丢失发生在很多地方: 当您更改分辨率时,标签会消失 从全屏应用程序,锁定 终端等。
重新创建的设备只发生在 极端的情况,比如拖着一个 窗口到另一台显示器(哪个 就司机而言 也许是完全不同的 显卡所以它必须开始 一切都从头开始。)