我正在尝试播放声音文件并等待其完成,然后退出调用 * AVAudioPlayer. play()* 的函数。
我知道有一个 * FinishedPlaying * 事件处理程序可以初始化,并将被相应地调用。
但是方法必须等待而不阻塞主线程......这是如何实现的呢?
- 编辑1**:
我尝试过使用ManualResetEvent,但在播放结束时,AVAudioPlayer示例上的代理FinishedPlaying从未被调用...
NSError err;
ManualResetEvent playSoundFinished = new ManualResetEvent(false);
var currentPlayer = new AVAudioPlayer(soundResource, "mp3", out err);
currentPlayer.FinishedPlaying += delegate { playSoundFinished.Set();};
currentPlayer.Play();
// This call should block until the event is set
DispatchQueue.DefaultGlobalQueue.DispatchSync(() => playSoundFinished.WaitOne(-1));
1条答案
按热度按时间jecbmhm31#
您可以通过将布尔值传递给构造函数来控制ManualResetEvent的初始状态:
true
,如果用信号通知初始状态,否则为false
。您可以通过如下更改来解决此问题:
ManualResetEvent playSoundFinished = new ManualResetEvent(true);