【问题标题】:How to play all songs from List<Song> with Windows Media Player?如何使用 Windows Media Player 播放 List<Song> 中的所有歌曲?
【发布时间】:2016-01-09 11:19:42
【问题描述】:

所以我有一个名为 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();
    }
}

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

【问题讨论】:

标签: c# axwindowsmediaplayer


【解决方案1】:

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

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

【讨论】:

  • 现在部分:“sender, PlayStateChangeEvent e”变红了
  • 现在同一部分 + e.newState 变红了
  • 已更新(删除 lambda 并在末尾添加 ;)
  • PlayStateChangeEvent e 变红,“找不到类型或命名空间 PlayStateChangeEvent”。我不明白,我应该在某个地方申报还是什么? ://
  • 好吧,将 PlayStateChangeEvent 替换为 AxWMPLib._WMPOCXEvents_PlayStateChangeEvent(抱歉,我现在无法检查我的代码)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多