如何播放列表<;歌曲>;使用Windows Media Player

本文关键字:使用 Windows Media Player gt 歌曲 lt 播放列表 | 更新日期: 2023-09-27 18:29:40

所以我有一个列表类,名为SãrašasList,它有一个字符串项,名为vardas,其中包含歌曲的路径名,我在这个列表中有一些歌曲,还有AX Windows Media播放器的GUI,但当我写:

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

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

如何播放列表<;歌曲>;使用Windows Media Player

基本上,您所做的是遍历所有歌曲,并将每首歌曲加载到播放器中。当然,您的玩家只能处理其中的一个,所以您的收藏中的最后一个是有效的。

你应该做的是加载你的第一首歌,在每个媒体结束时,你必须加载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
}