windows 媒体播放器状态不会改变
windows media player state wont change
我正在尝试做到这一点,以便当一首歌曲结束时播放下一首 automatically.I 我正在将歌曲的名称加载到列表框中,我还有一个字典 SongsNPaths,其中的键包含名称歌曲和它们的完整值 path.I 也有一个播放按钮,它的用途是在歌曲 paused.Also 之后播放歌曲,当我在 listbox.Everything 当我手动执行时按预期工作但是当我尝试在上一首结束后播放歌曲时 wont.Even 尽管我更改了列表框索引没有任何反应并且 WMP 状态堆栈在 Ready.Also即使索引发生变化并且没有任何反应,WMP url 也会更新,因为如果我手动按下播放按钮,歌曲就会开始播放 normally.Any 关于我缺少什么的想法?
代码:
播放按钮:
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();
}
}
}
}
以下内容对您有所帮助。
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 属性 的文档,不建议直接从事件处理程序调用此 属性。
Do not call this method from event handler code. Calling URL from an
event handler may yield unexpected results.
一个选项将如上面的代码所述。
我正在尝试做到这一点,以便当一首歌曲结束时播放下一首 automatically.I 我正在将歌曲的名称加载到列表框中,我还有一个字典 SongsNPaths,其中的键包含名称歌曲和它们的完整值 path.I 也有一个播放按钮,它的用途是在歌曲 paused.Also 之后播放歌曲,当我在 listbox.Everything 当我手动执行时按预期工作但是当我尝试在上一首结束后播放歌曲时 wont.Even 尽管我更改了列表框索引没有任何反应并且 WMP 状态堆栈在 Ready.Also即使索引发生变化并且没有任何反应,WMP url 也会更新,因为如果我手动按下播放按钮,歌曲就会开始播放 normally.Any 关于我缺少什么的想法?
代码:
播放按钮:
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();
}
}
}
}
以下内容对您有所帮助。
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 属性 的文档,不建议直接从事件处理程序调用此 属性。
Do not call this method from event handler code. Calling URL from an event handler may yield unexpected results.
一个选项将如上面的代码所述。