Synchronization NAudio-创建WaveOut的同步版本。停止

Synchronization NAudio-创建WaveOut的同步版本。停止,synchronization,naudio,Synchronization,Naudio,我使用WaveOut在WPF应用程序中播放音频。我需要在手动停止播放音频后运行一些代码。将代码放在WaveOut.Stop()之后会导致问题,因为WaveOut.Stop()不会立即停止音频。当我将代码放入WaveOut.PlaybackStopped的事件处理程序中时,它工作正常 但是,我希望有一个更干净的设计,通过创建一个方法来停止音频并仅在音频真正停止后返回,即在WaveOut.PlaybackStopped启动后返回,如: WaveOut_.StopCompletely(); DoSom

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

但是,我希望有一个更干净的设计,通过创建一个方法来停止音频并仅在音频真正停止后返回,即在
WaveOut.PlaybackStopped
启动后返回,如:

WaveOut_.StopCompletely();
DoSomething();
我不想等待音频停止,因为如果我这样做,我将不得不用async await装饰我的许多代码库。相反,我想阻止UI。我不想阻拦,因为时间很短。我试过使用发布的
AutoResetEvent
,但由于某些原因,它会永远阻塞。我还尝试使用发布的
TaskCompletionSource
(不等待),但这会立即返回


非常感谢您的帮助。

一个简单的方法就是在播放状态停止之前一直睡眠:

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

谢谢,但我想等待停止所需的确切时间,不超过这个时间。另外,使用“Thread.Sleep”不起作用,因为它会阻止当前线程(GUI线程),所以“WaveOut.PlaybackStopped”永远不会被触发。