媒体播放器WinForm不会参加比赛

时间:2014-03-21 16:58:08

标签: c# winforms media-player

我有这段代码,用于检查歌曲是否已经结束,以及是否已选择下一首歌曲。我在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);
    }
}

1 个答案:

答案 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();
    }