如何解决XNA应用无响应
我在装有VS 2008的Windows 7 x64上有一个XNA 3.1应用程序。在约7秒钟时,如果游戏没有焦点,则窗口将变灰(有时!)。标题加Not Responding
。如果游戏具有焦点,则窗口可能会略微改变屏幕上的位置,并且托盘上的应用程序图标会像打开新程序一样移动。
这仅会发生一瞬间,然后应用程序图标移回到其原始位置。它在调试和发布模式下都执行此操作。这很奇怪,因为据我所知,该应用程序没有陷入任何循环。如果我进入VS并在代码没有响应时暂停代码,它将向我显示Instance.Run,它应该在Program类中运行。我已经尝试在那一刻暂停它;
调用堆栈如下所示:
[睡觉,等待或加入]
外部代码。 ->
mscorlib.dll!System.Threading.Thread.Sleep(int毫秒超时)+ 0x5字节
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.Tick()+ 0x98字节
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.HostIdle(对象发送者...
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.GameHost.OnIdle()+ 0x3d字节
... 等等。
如果我在暂停时点击运行,该程序将运行并解冻。进入此非响应模式后,应用程序将不会自行解冻。没有响应时,所有声音会继续起作用。
另外,我有一个重写OnDeactivated()
事件的方法,即使应用程序将具有焦点,它也会在应用程序失去响应时被调用。我尝试为我的图形卡安装最新的驱动程序,但未能解决此问题。当运行不带VS的可执行文件时,也会发生此问题。就像我说的那样,这个问题发生的时间约为75%...否则它可以正常工作。
我只找到一篇有关此问题的论坛帖子:
http://forums.create.msdn.com/forums/p/56743/346180.aspx
It looks like it was never resolved.
解决方法
原来我在Update()方法中检查Mediaplayer.State,由于我的探查器,我发现了问题。 MediaPlayer.State是一个昂贵的枚举,一旦我删除了该块,它就不再挂起。
, 这听起来像是一个很奇怪的问题……唯一想到的是,也许应用程序无法优雅地处理设备丢失的问题。我知道这很模糊,但是也许可以暗示。检出所有内容加载例程(尤其是如果您是在手动而不是通过内容管道来进行任何资源操作,请检出DeviceLost事件等)。
一些其他信息:请查阅XNA团队的博客文章,了解如何正确处理资源和设备丢失/重置事件:http://blogs.msdn.com/b/xna/archive/2006/09/18/761355。 aspx
还有更多信息:我在上面获得链接的论坛帖子中肖恩·哈格里夫斯(Shawn Hargreaves)引用了这句话,这就是为什么我认为这可能与您所经历的事情有关:
设备丢失并重新创建设备
不同的东西。自动池
资源将在丢失的设备中生存,
但任何时候都需要重新创建
设备已重新创建。
设备丢失发生在许多地方:
更改分辨率时,请移开
在全屏应用中,锁定
终端等
重新创建设备仅发生在
极端情况下,例如拖动
窗口转到另一个监视器(
就驾驶员而言
可能完全不同
图形卡,所以它必须启动
从头开始)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。