NAudio - 创建WaveOut.Stop的同步版本

时间:2017-04-29 18:52:52

标签: synchronization naudio

我使用WaveOut在WPF应用中播放音频。我手动停止播放音频后需要运行一些代码。在WaveOut.Stop()之后立即放置代码会导致问题,因为WaveOut.Stop()不会立即停止音频。当我将代码放在WaveOut.PlaybackStopped的事件处理程序中时,它可以正常工作。

但是,我希望通过创建一种停止音频的方法来实现更清晰的设计,并且只有在它真正停止后才返回,即在WaveOut.PlaybackStopped被触发后,如:

WaveOut_.StopCompletely();
DoSomething();

我不希望await音频停止,因为如果我这样做,我将不得不用async-await来装饰我的很多代码库。相反,我想阻止UI。我不在乎阻止,因为它的时间很短。我尝试使用AutoResetEvent,因为已发布here,但由于某种原因,它会永久阻止。我也尝试使用TaskCompletionSource(无需等待)发布here,但这会立即返回。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

一个简单的方法就是睡眠,直到播放状态停止:

while (player.PlaybackState != PlaybackState.Stopped)
{
    Thread.Sleep(500);
}