我使用WaveOut在WPF应用程序中播放音频。在手动停止播放音频后,我需要运行一些代码。将代码直接放在WaveOut.Stop()后面会导致问题,因为WaveOut.Stop()不会立即停止音频。当我将代码放在WaveOut.PlaybackStopped的事件处理程序中时,它工作得很好。
然而,我希望有一个更干净的设计,通过创建一个方法来停止音频,并只有在它真正停止后才返回,即在WaveOut.PlaybackStopped被触发后,就像这样:
WaveOut_.StopCompletely();
DoSomething();我不想等待音频停止,因为如果我这样做,我将不得不使用await -await来修饰我的代码库。相反,我想阻止UI。我不介意阻塞,因为它的时间很短。我试过使用AutoResetEvent,就像发布的here一样,但由于某些原因,它永远无法使用。我也尝试使用TaskCompletionSource (无需等待)作为发布的here,但这会立即返回。
任何帮助都是非常感谢的。
发布于 2017-05-02 16:18:35
一种简单的方法是休眠,直到播放状态停止:
while (player.PlaybackState != PlaybackState.Stopped)
{
Thread.Sleep(500);
}https://stackoverflow.com/questions/43699357
复制相似问题