NAudio,windows 服务,多线程
NAudio, windows service, multithreading
我有 windows 服务可以通过 NAudio.dll
播放 *.wav 文件(多线程)
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.\n{0}", exception.ToString()); //<-never don't catch
}
}
}
如果区域 'play' 有评论 -> 所有作品
如果区域 'play' 未注释 -> 有时我的服务停止时没有任何错误。
我尝试附加调试器,我看到:
'System.ExecutionEngineException' 类型的未处理异常发生在 NAudio.dll
中
此外:'System.AccessViolationException' 类型的第一次机会异常发生在 NAudio.dll
中
有什么想法吗?
我找到了替换 DirectSoundOut > WaveOutEvent 的建议。
现在一切正常。谢谢斯图尔特。
我有 windows 服务可以通过 NAudio.dll
播放 *.wav 文件(多线程) 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.\n{0}", exception.ToString()); //<-never don't catch
}
}
}
如果区域 'play' 有评论 -> 所有作品
如果区域 'play' 未注释 -> 有时我的服务停止时没有任何错误。
我尝试附加调试器,我看到: 'System.ExecutionEngineException' 类型的未处理异常发生在 NAudio.dll
中此外:'System.AccessViolationException' 类型的第一次机会异常发生在 NAudio.dll
中有什么想法吗?
我找到了替换 DirectSoundOut > WaveOutEvent 的建议。 现在一切正常。谢谢斯图尔特。