如何使用 Windows Media Player 播放 List<Song> 中的所有歌曲?
How to play all songs from List<Song> with Windows Media Player?
所以我有一个名为 SąrašasList 的列表 class,它有一个名为 vardas 的字符串项,其中包含一首歌曲的路径名,我在这个列表中有几首歌曲,还有带 AX 的 GUI Windows 媒体播放器,但是当我写的时候:
private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e)
{
foreach (SąrašasList d in atrinktas)
{
axWindowsMediaPlayer1.URL = d.getVardas();
}
}
只播放最后一首歌曲,不播放下一首,怎么办?
我想让这个播放器一首接一首地播放所有歌曲。
基本上,您所做的是遍历 所有 首歌曲,并将每首歌曲加载到播放器中。当然,您的播放器只能处理其中的 一个 ,因此您的最后一个 collection 正在有效播放。
你应该做的是加载你的第一首歌曲,并且在每个媒体结束时,你必须加载 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
}
所以我有一个名为 SąrašasList 的列表 class,它有一个名为 vardas 的字符串项,其中包含一首歌曲的路径名,我在这个列表中有几首歌曲,还有带 AX 的 GUI Windows 媒体播放器,但是当我写的时候:
private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e)
{
foreach (SąrašasList d in atrinktas)
{
axWindowsMediaPlayer1.URL = d.getVardas();
}
}
只播放最后一首歌曲,不播放下一首,怎么办? 我想让这个播放器一首接一首地播放所有歌曲。
基本上,您所做的是遍历 所有 首歌曲,并将每首歌曲加载到播放器中。当然,您的播放器只能处理其中的 一个 ,因此您的最后一个 collection 正在有效播放。
你应该做的是加载你的第一首歌曲,并且在每个媒体结束时,你必须加载 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
}