NAudio,Windows服务,多线程

Posted

技术标签:

【中文标题】NAudio,Windows服务,多线程【英文标题】:NAudio, windows service, multithreading 【发布时间】:2015-03-22 21:23:54 【问题描述】:

我有通过 NAudio.dll 播放 *.wav 文件(多线程)的 Windows 服务

    public static void PlayFileBackground(string fileName)
    
        Task.Run(() =>  PlayFile(fileName); );
    

    private static void PlayFile(string fileName)
    
        if (File.Exists(fileName) == true)
        
            try
            
                var manualResetEvent = new ManualResetEvent(false);
                using (var wfr = new WaveFileReader(fileName))
                using (WaveChannel32 wc = new WaveChannel32(wfr)  Volume = 1, PadWithZeroes = false )
                using (var audioOutput = new DirectSoundOut())
                
#region play
                    audioOutput.Init(wc);                        
                    audioOutput.Play();
                    audioOutput.PlaybackStopped += (sender, e) =>  manualResetEvent.Set(); ; 
                    manualResetEvent.WaitOne();
                    audioOutput.Stop();
#endregion
                
            
            catch (Exception exception)
                            
                logger.Error("Error NAudio.\n0", exception.ToString()); //<-never don't catch
            
        
    

如果区域“播放”评论 -> 所有作品

如果区域“播放”未注释 -> 有时我的服务会停止而没有任何错误。

我尝试使用调试器附加,我看到: NAudio.dll 中出现“System.ExecutionEngineException”类型的未处理异常

另外:NAudio.dll 中出现了“System.AccessViolationException”类型的第一次机会异常

有什么想法吗?

【问题讨论】:

naudio.codeplex.com/discussions/574521 【参考方案1】:

我找到了替换 DirectSoundOut > WaveOutEvent 的建议。 现在一切正常。谢谢斯图尔特。

【讨论】:

以上是关于NAudio,Windows服务,多线程的主要内容,如果未能解决你的问题,请参考以下文章

多线程:防止 Visual Studio 阻塞特定线程 [重复]

利用TCP服务器接收多客户端的音频数据,通过Naudio进行播放及音频处理TCP服务器

C#多进程-多线程服务和windows调度器

如何正确停止多线程 .NET Windows 服务?

多线程在 C++ 中的 Windows 中将多个客户端连接到单个服务器

c++ windows中客户端服务器编程中的多线程