# .NET and More > WPF, WCF, WF >  How to play an Audio File After another has Finished in WPF MediaElement

## vuyiswamb

Good Day 

i have a Media Element in WPF and i am playing mp3's programatically on a click of a button. Now there are times where i want to Play  two different mp3's in an order after another e.g 


* *

```
*
                    PlayAudio("AccountOpen_Message1"); 
 
                    PlayAudio("AccountOpen_Message2");
```

Now i tried to put it a Thread Sleep between, it work once after that the Second mp3 plays after the first one. So i want to call the same function twice to play different mp3's but i want one to wait for another to finish playing before playing, i hoped for a "isPlaying" Property to determine if the element was playing. Does anyone have a solution.







```
     //Function to Play a Video
        private void PlayAudio(string Fruit)
        {
            VideoPlayer.Source = new Uri(@"D:\Articles\How to identify Players in Kinect\IdentifyPlayers\WpfApplication1\WpfApplication1\Voices\" + Fruit + ".mp3", UriKind.Absolute);
            VideoPlayer.LoadedBehavior = MediaState.Manual;
            VideoPlayer.Play();
        }
```



```
 <MediaElement x:Name="VideoPlayer"  Volume="100" LoadedBehavior="Manual" MediaEnded="VideoPlayer_MediaEnded"  UnloadedBehavior="Close"   ></MediaElement>
```




```
   private void VideoPlayer_MediaEnded(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
```




Thanks

----------


## wakawaka

The simpliest way I can think of as of now:



```
//...

private Queue<Uri> playList = new Queue<Uri>()


private void button1_Click(object sender, RoutedEventArgs e)
{
   playList.Enqueue(new Uri(@"C:\temp\mysound_1.mp3"));
   playList.Enqueue(new Uri(@"C:\temp\mysound_2.mp3"));

   PlayAudioPlaylist();
}

private void PlayAudioPlaylist()
{
   if (playList.Count > 0)
   {
      mediaElement.Source = playList.Dequeue();
      mediaElement.LoadedBehavior = MediaState.Manual;
      mediaElement.Play();
   }
}

private void mediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
   PlayAudioPlaylist();
}

//...
```

That said, you could make it a whole lot prettier if you wrap it in its own class or create a new control and inherit from the MediaElement with a few modifications that exposes an IsMediaPlaying property.

----------

