C # MediaPlayer_MediaEnded не вызывается по окончании воспроизведения - PullRequest
0 голосов
/ 02 марта 2019

Я занимаюсь разработкой Juke Box, где я использую компонент Media Player и хотел бы получить событие Media Ended, когда каждая песня закончится, чтобы удалить ее из списка воспроизведения, но событие MediaEnded никогда не вызывается.Это мой код:

using System;
using System.Linq;
using System.Windows.Media;
using System.Threading;
using System.Collections.Generic;
using JukeBox.Models;

namespace JukeBox.Helpers
{
    public class BackgroundPlayer
    {
        private static List<SongModel> queue = new List<SongModel>();

        public static SongModel _currentSong;

        private bool threadStarted = false;
        private Thread workerThread = new Thread(new ThreadStart(ThreadMethod));

        private static MediaPlayer mediaPlayer;

        private static AutoResetEvent autoResetEvent = new AutoResetEvent(false);

        public int RandomTime { get; set; } = 1;
        public Action<string> SongFinished;
        public Action RandomTimeReached;
        public BackgroundPlayer()
        {
            workerThread.IsBackground = true;
        }
        public void EnqueueSong(SongModel songModel)
        {
            queue.Add(songModel);

            if (!threadStarted)
            {
                threadStarted = true;

                workerThread.Start();
            }
        }
        public static void ThreadMethod()
        {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.MediaEnded += MediaPlayer_MediaEnded;

            while (true)
            {
                if (queue.Count > 0)
                {
                    var _currentSong = queue.First();

                    mediaPlayer.Open(new Uri(_currentSong.SongFullPath));


                    mediaPlayer.Play();

                    autoResetEvent.WaitOne();
                }

                Thread.Sleep(1000);
            }
        }
        private static void MediaPlayer_MediaEnded(object sender, EventArgs e)
        {
            queue.Remove(_currentSong);

            autoResetEvent.Set();
        }
    }
}

Может кто-нибудь объяснить, где проблема и как ее исправить?

...