我一直在這個論壇以及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();
}
}
什麼樣的應用呢?在大多數類型的應用程序中,您不能「等待」I/O操作。 –
嗨Henk,這是一個WinForm應用程序,它使用這個上面的類。 WinForm應用程序需要同步播放音頻文件,因此它基本上需要等待... – LorenB
您還可以處理'MediaFailed'事件,並在播放結束之前查看是否發生錯誤。它似乎可以優雅地結束,但不是。 – Abhinav