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”永远不会被触发。