我有这段代码,用于检查歌曲是否已经结束,以及是否已选择下一首歌曲。我在ListBox中有歌曲名称,因此当选择下一首歌曲时,第一个功能会触发。你能解释一下为什么它没有播放这首歌吗?
private void Files_SelectedIndexChanged(object sender, EventArgs e)
{
player.URL = percorsi[Files.SelectedIndex];
}
private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent er)
{
if (er.newState == 8)
{
Files.SetSelected((Files.SelectedIndex + 1) % nomi.Length , true);
}
}
答案 0 :(得分:1)
Microsoft的URL属性帮助页面有以下注释。
不要从事件处理程序代码中调用此方法。从事件处理程序调用URL可能会产生意外结果。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd562470(v=vs.85).aspx
你也可以看到上一篇文章。
Playing two video with axWindowsMediaPlayer
我提出的解决方案虽然不是最好的,但是在表单上创建了一个Timer并实现了_Tick处理程序。然后在表单I中还创建了一个布尔值(初始化为false)以指示应该播放新文件。
private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (e.newState == 8)
{
Files.SelectedIndex = File.SelectedIndex + 1;
}
}
private void Files_SelectedIndexChanged(object sender, EventArgs e)
{
playNewFile = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (playNewFile)
{
axWindowsMediaPlayer1.URL = percorsi[Files.SelectedIndex];
playNewFile = false;
}
}
我将Timer Interval设置为100 ms并在Form_Load事件中启动它。
private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 100;
timer1.Start();
}