gpt4 book ai didi

c# - 您如何阻止 SoundEffect 在 XNA windows 游戏关闭时崩溃?

转载 作者:太空狗 更新时间:2023-10-30 01:26:22 25 4
gpt4 key购买 nike

我正在使用 Visual C# Express 在 xna 中为 Windows 创建游戏。在游戏中,有六个 SoundEffect 对象定期调用它们的 Play() 方法。问题是有时当游戏关闭时它会崩溃。 只要在播放音效时关闭窗口,就会发生这种情况。这是在 Visual C# 中弹出的消息:

AccessViolationException 未处理

试图读取或写入 protected 内存。这通常表明其他内存已损坏。

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);

最佳答案

使 SoundEffect 对象成为类成员并在类解构时调用 SoundEffect 的 Dispose() 方法:

class MyClass
{
~MyClass()
{
effect.Dispose();
}

SoundEffect effect;

}

这应该让 SoundEffect 对象在您关闭游戏时自行清理。您可以在此处阅读有关一次性对象的信息:http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

关于c# - 您如何阻止 SoundEffect 在 XNA windows 游戏关闭时崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com