XNA应用程序没有响应

时间:2011-05-28 07:03:04

标签: c# visual-studio xna

我在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.

2 个答案:

答案 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>

  

设备丢失和设备重新创建   不同的东西。自动游泳池   资源将在设备丢失后存活   但需要在任何时候重新创建   设备重新创建。

     

设备丢失发生在很多地方:   当您更改分辨率时,标签会消失   从全屏应用程序,锁定   终端等。

     

重新创建的设备只发生在   极端的情况,比如拖着一个   窗口到另一台显示器(哪个   就司机而言   也许是完全不同的   显卡所以它必须开始   一切都从头开始。)