为什么 axWindowsMediaPlayer1.Ctlcontrols.play(); /不立刻播放mp3?

qq_26760459 2016-04-29 11:14:54
private void txtYouxi_TextChanged(object sender, EventArgs e)
{
axWindowsMediaPlayer1.URL = "d:/xuexi/mp3/daduile.mp3";
axWindowsMediaPlayer1.Ctlcontrols.play(); //执行到此处不进行播放daduile.mp3,这是为什么?
MessageBox.Show("333"); //加上

GetQuestionDetailsBook(); //

}


以上代码加上在加上MessageBox.Show("333");后,/daduile.mp3";开始播放
取消MessageBox.Show("333");整个事件全部执行完毕,也就是GetQuestionDetailsBook(); 执行完毕以后才能播放
为什么 axWindowsMediaPlayer1.Ctlcontrols.play(); /不立刻播放mp3?
...全文
399 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_26760459 2016-04-29
  • 打赏
  • 举报
回复
引用 10 楼 sgyiliya 的回复:


/// <summary>
        /// 当播放完成时自动触发这个事件。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {
                if (e.newState == 8)
                {
                    
                }

        }

结合上面的这个,应该可以实现你的需求。
我最早也是用这个来判断的,但是这个东西无论怎么样都不触发,就奇怪了。我的写法和你一样
sgyiliya 2016-04-29
  • 打赏
  • 举报
回复


/// <summary>
        /// 当播放完成时自动触发这个事件。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {
                if (e.newState == 8)
                {
                    
                }

        }

结合上面的这个,应该可以实现你的需求。
qq_26760459 2016-04-29
  • 打赏
  • 举报
回复
引用 6 楼 oysy 的回复:
我原来用它,播放一个列表的视频都没有问题……
可以正常播放没有问题,我是想说这个播放顺序是
引用 4 楼 sgyiliya 的回复:


axWindowsMediaPlayer1.settings.autoStart = false;
                    axWindowsMediaPlayer1.URL = "d:\\xuexi\\mp3\\daduile.mp3";
                    //axWindowsMediaPlayer1.settings.setMode("loop", true);
                    axWindowsMediaPlayer1.Ctlcontrols.play();

事先要让WMP控件显示在左边的工具箱里面,然后拖到你的界面上,再写代码。
在比如这个 private void button3_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.URL = "d:/xuexi/mp3/111.mp3"; axWindowsMediaPlayer1.Ctlcontrols.play(); lblDescripiton.Text = "111"; axWindowsMediaPlayer1.URL = "d:/xuexi/mp3/222.mp3"; axWindowsMediaPlayer1.Ctlcontrols.play(); } 我测试了,只能播放222.mp3";,无法实现按顺序播放111.mp3
sgyiliya 2016-04-29
  • 打赏
  • 举报
回复
那就用线程来播放语音,记得用前台线程,不要用后台线程,后台线程可能播放不了。


Thread _thd = new Thread(RunThread);
_thd.Start();

private void RunThread()
        {
axWindowsMediaPlayer1.settings.autoStart = false;
                    axWindowsMediaPlayer1.URL = "d:\\xuexi\\mp3\\daduile.mp3";
                    //axWindowsMediaPlayer1.settings.setMode("loop", true);
                    axWindowsMediaPlayer1.Ctlcontrols.play();
            }

qq_26760459 2016-04-29
  • 打赏
  • 举报
回复
引用 4 楼 sgyiliya 的回复:


axWindowsMediaPlayer1.settings.autoStart = false;
                    axWindowsMediaPlayer1.URL = "d:\\xuexi\\mp3\\daduile.mp3";
                    //axWindowsMediaPlayer1.settings.setMode("loop", true);
                    axWindowsMediaPlayer1.Ctlcontrols.play();
       

事先要让WMP控件显示在左边的工具箱里面,然后拖到你的界面上,再写代码。
我测试了你的代码也是一样的,如果这个 axWindowsMediaPlayer1.settings.autoStart = false; axWindowsMediaPlayer1.URL = "d:\\xuexi\\mp3\\daduile.mp3"; //axWindowsMediaPlayer1.settings.setMode("loop", true); axWindowsMediaPlayer1.Ctlcontrols.play(); 之后没有别的代码了,就可以立刻播放。 如果这个之后还有别的代码,则后边的代码都执行完毕才可以执行你写的那个播放代码。 比如把你的代码改成 axWindowsMediaPlayer1.settings.autoStart = false; axWindowsMediaPlayer1.URL = "d:\\xuexi\\mp3\\daduile.mp3"; //axWindowsMediaPlayer1.settings.setMode("loop", true); axWindowsMediaPlayer1.Ctlcontrols.play(); string i="1111" 则根据调试结果,按F11按步骤调试,你可以发现, axWindowsMediaPlayer1.Ctlcontrols.play();到这个地方没有播放,直到 string i="1111"执行完毕以后没有其他语句了,才进行了播放daduile.mp3";
飞天凤凰601 2016-04-29
  • 打赏
  • 举报
回复
我原来用它,播放一个列表的视频都没有问题……
sgyiliya 2016-04-29
  • 打赏
  • 举报
回复
WMP控件显示在左边的工具箱里面的方法,参见: ,在工具面板的空白处,按下鼠标右键弹出子菜单,选择“选择项”,弹出“选择工具箱项”对话框,然后选择“COM组件”中“Windows Media Player”控件,即可在工具箱面板上安装Windows Media Player工具. 参考:http://wenku.baidu.com/view/feaa581d6bd97f192279e9ac.html
sgyiliya 2016-04-29
  • 打赏
  • 举报
回复


axWindowsMediaPlayer1.settings.autoStart = false;
                    axWindowsMediaPlayer1.URL = "d:\\xuexi\\mp3\\daduile.mp3";
                    //axWindowsMediaPlayer1.settings.setMode("loop", true);
                    axWindowsMediaPlayer1.Ctlcontrols.play();

事先要让WMP控件显示在左边的工具箱里面,然后拖到你的界面上,再写代码。
qq_26760459 2016-04-29
  • 打赏
  • 举报
回复
引用 1 楼 qq_26760459 的回复:
谁帮忙解答一下呀,着急呀
改了一样,效果还是一样,还是不行
飞天凤凰601 2016-04-29
  • 打赏
  • 举报
回复
axWindowsMediaPlayer1.URL = "d:/xuexi/mp3/daduile.mp3"; 改成 axWindowsMediaPlayer1.URL = @"d:\xuexi\mp3\daduile.mp3";
qq_26760459 2016-04-29
  • 打赏
  • 举报
回复
谁帮忙解答一下呀,着急呀

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧