【问题标题】:windows media player state wont changewindows 媒体播放器状态不会改变
【发布时间】:2019-01-31 20:32:23
【问题描述】:

我试图让它在歌曲完成时自动播放下一首歌曲。我正在将歌曲的名称加载到列表框中,并且我还有一个字典 SongsNPaths,其中的键包含歌曲的名称和值它们的完整路径。我还有一个播放按钮,它的用途是在暂停后播放一首歌曲。当我在列表框中单击它的名称时,也会播放一首歌曲。当我手动执行时,一切都按预期工作但是,当我尝试在上一个结束后播放歌曲时,它不会。即使我更改列表框索引,也没有任何反应,并且 WMP 状态处于就绪状态。此外,即使索引更改并且没有任何反应,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();


                    }
                }
            }
        }

【问题讨论】:

    标签: c# windows-media-player


    【解决方案1】:

    以下内容应该对您有所帮助。

    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 属性的文档,建议不要直接从事件处理程序调用此属性。

    不要从事件处理程序代码中调用此方法。从一个调用 URL 事件处理程序可能会产生意想不到的结果。

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

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多