WPF MediaPlayer: ¿Cómo jugar en secuencia, sincronización?

Tengo esta función:

public static void Play(string FileName, bool Async = false)
    {
        System.Windows.Media.MediaPlayer mp = new System.Windows.Media.MediaPlayer();

        mp.Open(FileName.ToUri());
        mp.Play();
    }

Cuando llamo

Play(@"file1.mp3");
Play(@"file2.mp3");
Play(@"file3.mp3");
Play(@"file4.mp3");

todos juegan al mismo tiempo.

¿Cómo puedo hacer que MediaPlayer espere el final del archivo para reproducir el siguiente? ¿Cómo debería ser la función?

EDITAR

public static void Play(Uri FileName, bool Async = false)
    {
        AutoResetEvent a = new AutoResetEvent(false);

        MediaPlayer mp = new MediaPlayer();
        mp.MediaEnded += (o1, p1) =>
        {
            a.Set();
        };

        mp.MediaOpened += (o, p) =>
        {
            int total = Convert.ToInt32(mp.NaturalDuration.TimeSpan.TotalMilliseconds);

            mp.Play();
            if (!Async)
            {
                //System.Threading.Thread.Sleep(total);
                a.WaitOne();
            }
        };

        mp.Open(FileName);
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta