我一直在这个论坛,以及在MSDN,但我没有找到一个适当的解决方案,我的问题。可能我的方法不好。我有下面这个简单类,它有一个简单的方法("PlayAudioFile")。我所要做的就是等待回放完成,然后让方法完成并继续前进。由于.Play()是异步的,方法在回放完成之前就完成了--这对我不好,因为我想同步播放几个文件(一个接着另一个)。我尝试使用AutoResetEvent w/o运气,因为当播放结束时,我不会进入"MediaEnded“回调.1我不想使用的解决方案是让while ()循环忙着等待在MediaEnded内部发出回放信号的标志。只是看上去不太对。
有什么想法吗?
public class Audio
{
AutoResetEvent are = new AutoResetEvent(false);
public void PlayAudioFile(string file)
{
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.MediaEnded += m_MediaEnded;
mediaPlayer.Open(new Uri(file));
mediaPlayer.Play();
are.WaitOne();
}
private void m_MediaEnded(object sender, EventArgs e)
{
MediaPlayer mediaPlayer = (MediaPlayer)sender;
mediaPlayer.Close();
mediaPlayer = null;
are.Set();
}
}发布于 2014-01-16 21:50:43
如果您使用的是.Net framework>= 4.5,则可以利用异步/等待。您的代码可以是这样的(对不起,我盲目地编写代码)
await PlayAudioFile(somefile);public Task PlayAudioFile(string file)
{
var tcs = new TaskCompletionSource<bool>();
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.MediaEnded += (sender, e) =>
{
mediaPlayer.Close();
tcs.TrySetResult(true);
};
mediaPlayer.Open(new Uri(file));
mediaPlayer.Play();
return tcs.Task;
}https://stackoverflow.com/questions/21173429
复制相似问题