所以我有一个名为SąrašasList的列表类,它有一个名为vardas的字符串项,其中包含一首歌的路径名,我在这个列表中有几首歌,还有带有Windows Windows Media播放器的GUI,但是当我写道:
private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e) { foreach (S?rašasList d in atrinktas) { axWindowsMediaPlayer1.URL = d.getVardas(); } }
它只播放最后一首歌,但不会转到另一首歌,我该怎么办?我希望这个播放器一个接一个地播放所有歌曲.
基本上,你正在做的是迭代你的所有歌曲,并将每个歌曲加载到播放器中.当然,你的播放器只能处理其中一个,所以你的收藏中的最后一个有效地播放.
你应该做的是加载你的第一首歌,并在每个媒体的结尾,你必须加载n + 1首歌曲.
private System.Timers.Timer Timer; // Used to introduce a delay after the MediaEnded event is raised, otherwise player won't chain up the songs private void ScheduleSongs() { var count = 0; var firstSong = atrinktas.FirstOrDefault(); // using Linq if(firstSong == null) return; axWindowsMediaPlayer1.URL = firstSong.getVardas(); // PlayStateChange event let you listen your player's state. // https://msdn.microsoft.com/fr-fr/library/windows/desktop/dd562460(v=vs.85).aspx axWindowsMediaPlayer1.PlayStateChange += delegate(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { if(e.newState == 8 && count < atrinktas.Count()) { count++; var nextSong = atrinktas[count]; axWindowsMediaPlayer1.URL = nextSong.getVardas(); Timer = new System.Timers.Timer() { Interval = 100 }; Timer.Elapsed += TimerElapsed; // Execute TimerElapsed once 100ms is elapsed } }; } private void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e) { Timer.Stop(); Timer.Elapsed -= TimerElapsed; Timer = null; axWindowsMediaPlayer1.Ctlcontrols.play(); // Play the next song }