使用NAudio加载.wav后退出程序时出错

| 前几天我刚找到NAudio,并且一直在玩。我编写了一个简单的Windows窗体程序,其中包含一个加载按钮(加载特定的.wav歌曲),以及用于播放,暂停,停止,淡入声音的按钮(我自己使用计时器和逐渐增加的音量添加的功能),以及淡出声音。我也有一个跟踪栏控件来处理音量。我创建了一个包装器类,以放置所有NAudio内容,并在声音开始或暂停时添加诸如淡入/淡出和事件通知之类的附加功能。 好的,所有人都说,这很好。该程序正确加载,播放,暂停,停止以及淡入和淡出。音量跟踪栏可以正确反映正在播放的歌曲的音量。这么多的作品,但我确实有两个问题。 首先,单击“加载”按钮加载声音,然后执行我想(或不执行)所有播放之后,退出程序时,我收到以下弹出错误消息(“断言失败” ):\“ AcmStreamHeader.Finalize()中未调用AcmStreamHeader处置”。这是“中止,重试,忽略”弹出窗口之一,但几秒钟后消失,项目终止。 (注意:加载功能创建DirectSoundOut并调用直接从站点上的NAudio示例获取的CreateInputStream...。它还为定义的事件设置事件处理程序,但这可能无关紧要。) 在类析构函数中,我进行以下调用:
mainOutputStream.Close();
mainOutputStream.Dispose();
waveOutDevice.Dispose();
但是我仍然得到错误。这是个大问题,我将在另一个线程中问另一个问题。知道为什么会发生这种情况以及如何阻止它吗? 我在Windows 7 32位上运行VS 10。     
已邀请:
        错误的最可能原因(实际上只是一个Debug.Assert-在NAudio的发行版中不会发生)是mainOutputStream被分配给多个WaveStream,并且当您更改它时,您没有\不要处置旧的。当您退出应用程序时,垃圾收集器将运行,并且此Debug.Assert将触发。 其他几点: 无需调用mainOutputStream.Close和Dispose。只需呼叫其中之一即可。 您的清除代码不应位于类析构函数(finalizer?)中,而应位于Closing或Closed事件处理程序中用于Form的Dispose方法中。 编辑:另一个可能的原因是您从WaveStream派生,并且在您覆盖的Dispose方法中未对属于类成员的任何WaveStream调用Dispose。     

要回复问题请先登录注册