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

标签 c# xna audio

我正在使用 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/

相关文章:

c# - dd-MMM-yyyy 和 dd-MMM 的正则表达式?

c# - XNA:我怎样才能只绘制我的 Sprite 的 "pizza slice"?

c# - 获取kinect的特定深度值

javascript - 循环音频指定的次数 Html5 或 Javascript

c# - 如何判断 MemoryStream 是否固定大小?

c# - 是否有使用查询语法在 LINQ 查询中执行 ToList 的巧妙方法?

c# - 如何在没有源代码链接的情况下调试 System.StackOverflowException?

android - 如何检测设备是否有 3.5 毫米音频插孔?

audio - Cobalt raspi-2_gold 无法播放视频

c# - 如何从 mvc 5 中的 Controller 更改布局(母版页)?