2016-01-09 54 views
4

所以我有一个名为SąrašasList的列表类,它有一个名为vardas的字符串项,它包含一首歌曲的路径名,我在这个列表中有几首歌曲,还有AX Windows Media Player的GUI,但是当我编写时:如何使用Windows Media Player播放列表<Song>中的所有歌曲?

private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e) 
{ 
    foreach (SąrašasList d in atrinktas) 
    { 
     axWindowsMediaPlayer1.URL = d.getVardas(); 
    } 
} 

它只播放最后一首歌,但不去另一首歌,我该怎么办? 我希望这个播放器一个接一个播放所有歌曲。

+2

我希望它发挥的*最后*歌曲... –

+0

是的,它扮演的最后一首歌,但我想它从列表中 – Haby

+1

HTTP播放所有歌曲://meta.stackoverflow。 com/questions/266563/do-non-english-words-increase-the-probability-of-receiving-downvotes/ – nvoigt

回答

5

基本上,你正在做的是遍历所有你的歌曲,并加载到播放器中。当然,你的播放器只能处理其中一个,所以你最后一个收藏有效地播放。

你应该做的是加载你的第一首歌曲,并在每个媒体结束时,你必须加载第一首歌曲。

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 
} 
+0

现在部分:“sender,PlayStateChangeEvent e”变为红色 – Haby

+0

现在相同部分+ e.newState获取红色 – Haby

+0

已更新(已删除的lambda和add;最后) – Ben

相关问题