我正在使用Visual C#Express为xna中的windows创建游戏。在游戏中,有六个SoundEffect对象定期调用他们的Play()方法。问题在于,有时游戏关闭时会崩溃。 这似乎发生在播放soundeffect时关闭窗口时。这是在Visual C#弹出消息:如何阻止SoundEffect在XNA Windows游戏关闭时崩溃?
AccessViolationException了未处理
试图读取或写入受保护的存储器中。这通常表明其他内存已损坏。
没有在Visual Studio调试和当“得到这个异常一般帮助”被点击时,一个空白页弹出任何可用的源..
中使用的代码看起来很像MSDN示例。这看起来像是存在于底层框架某处的问题,而不是我的代码。但我当然不知道。这已经发生了很多次。
http://msdn.microsoft.com/en-us/library/bb195053.aspx
下面是完整的异常详细信息:
System.AccessViolationException was unhandled
Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Source=Microsoft.Xna.Framework
StackTrace:
at Microsoft.Xna.Framework.Audio.AudioCallbackDispatcher.IsEventRegistered(EventType type)
at Microsoft.Xna.Framework.Audio.AudioCallbackDispatcher.UnregisterEvent(EventType type)
at Microsoft.Xna.Framework.Audio.KernelMicrophone.ShutdownCaptureEngine()
at Microsoft.Xna.Framework.Audio.MicrophoneUnsafeNativeMethods.ShutdownCaptureEngine()
at Microsoft.Xna.Framework.Audio.AudioRendererShutdownHandler.AppExitingEventHandler(Object sender, EventArgs args)
InnerException:
(我也有音乐通过的MediaPlayer播放,但我不认为这是相关的)
编辑:我似乎找到有用的东西,但它有点骇人听闻,真的不应该有必要。我仍然乐意接受更优雅的解决方案。
在Game1.UnloadContent()中调用此行。它会确保(如果你的声音效果都短于3秒)程序实际关闭时没有声音播放。
System.Threading.Thread.Sleep(3000);
您的UnloadContent代码的外观如何? (而且,你是否能够在从模板项目开始时重现此问题?) – 2011-02-25 07:49:41