用axWindowsMediaPlayer播放两个视频

时间:2012-03-08 13:08:32

标签: c# .net

我尝试播放jpg(循环播放),点击mp4后应播放结束,jpg应该再次播放。我不知道为什么但是在我玩了axWindowsMediaPlayer1_PlayStateChange后,vido播放然后停止。帮助

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Video
{
    public partial class Form1 : Form
    {
        bool clicked = false;
        public Form1()
        {
            InitializeComponent();
            axWindowsMediaPlayer1.URL = "wait2.JPG";

        }



        private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {
            if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded & clicked== true)
            {
                clicked = false;
                axWindowsMediaPlayer1.settings.setMode("Loop", true);
                axWindowsMediaPlayer1.URL = "wait2.JPG";
                axWindowsMediaPlayer1.Ctlcontrols.play();

            }

        }

        private void axWindowsMediaPlayer1_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e)
        {
            axWindowsMediaPlayer1.settings.setMode("Loop", false);
            axWindowsMediaPlayer1.URL = "video.MP4";
            axWindowsMediaPlayer1.Ctlcontrols.play();
            clicked = true;
        }


    }
}

1 个答案:

答案 0 :(得分:7)

我希望有人在发布时回复了这个问题。我花了很多时间来弄清楚为什么我无法通过设置URL属性来启动新视频。我终于在这里找到了这个问题的答案:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd562470%28v=vs.85%29.aspx

问题在于在axWindowsMediaPlayer1_PlayStateChange()事件处理程序中设置URL属性。根据上面的msdn文件:

“不要从事件处理程序代码中调用此方法。从事件处理程序调用URL可能会产生意外结果。”

因此必须在偶数处理程序之外设置URL属性。我还尝试了Dispatcher.Invoke(),甚至从事件处理程序中启动一个新线程来设置URL属性;但那也没有帮助。它真的必须来自事件处理程序之外!