【发布时间】:2011-02-24 17:45:08
【问题描述】:
我正在使用 Visual C# Express 在 xna 中为 windows 创建一个游戏。在游戏中,有六个 SoundEffect 对象定期调用其 Play() 方法。问题是有时当游戏关闭时它会崩溃。 似乎在播放音效时关闭窗口时会发生这种情况。这是在 Visual C# 中弹出的消息:
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 的代码是什么样的? (而且,从模板项目开始时,你能重现这个吗?)