Я занимаюсь разработкой 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();
}
}
}
Может кто-нибудь объяснить, где проблема и как ее исправить?