Windows Media Player的状态不会改变

时间:2019-01-31 11:02:44

标签: c# windows-media-player

我正在尝试使歌曲播放完毕后自动播放下一首歌曲。我将歌曲名称加载到列表框中,并且我还拥有字典SongsNPaths,其中的键包含歌曲名称和值是它们的完整路径。我还有一个播放按钮,它的用途是在暂停后播放一首歌曲。当我在列表框中单击它的名称时,也会播放一首歌曲。但是,当我尝试播放上一首歌之后播放的歌曲时,它就不会。即使我更改了列表框索引,也没有任何反应,并且WMP状态为Ready。即使索引发生了变化,也没有任何反应,WMP url却被更新了,因为如果我手动按下播放按钮,则歌曲会正常播放。关于缺少什么的任何想法?

代码:
播放按钮:

private void button2_Click(object sender, EventArgs e)
        {
            //elexgei an exei klikaristei idi mia fora to button wste na min dinei sunexws to path kai to tragoudi na xekinaei apo tin arxi

            if (listBox1.SelectedItem != null)
            {

                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }


每当列表框选定值更改时发生的事件:

private void listBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            if (listBox1.SelectedItem != null)
            {

                axWindowsMediaPlayer1.URL = SongsNPaths[listBox1.SelectedItem.ToString()];
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }

歌曲结束后的事件:

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {//check to state to WMP an einai finished ---> 8 to allazei tragoudi (bazei to epomeno)

            if(e.newState == 8)
            {
                if(listBox1.Items.Count > 1)
                {
                    if (listBox1.SelectedIndex != listBox1.Items.Count - 1)
                    {
                        listBox1.SelectedIndex++;

                        axWindowsMediaPlayer1.URL = SongsNPaths[listBox1.SelectedItem.ToString()];

                        //button2.PerformClick();

                        axWindowsMediaPlayer1.Ctlcontrols.play();


                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

以下内容应为您提供帮助。

if(e.newState == 8)
{
   if(listBox1.Items.Count > 1)
   {
         if (listBox1.SelectedIndex != listBox1.Items.Count - 1)
         {
               listBox1.SelectedIndex++;
               axWindowsMediaPlayer1.URL = SongsNPaths[listBox1.SelectedItem.ToString()];

               this.BeginInvoke(new Action(() => {
                this.axWindowsMediaPlayer1.URL = newFilePath;
            }));
         }
   }
}

如果您查看AxWindowsMediaPlayer.Url属性的文档,建议不要直接从事件处理程序中调用此属性。

  

不要从事件处理程序代码中调用此方法。来自的调用网址   事件处理程序可能会产生意外的结果。

一个选项将如上面的代码所述。