由于我要实现在后台通过代码控制播放器何时播放,何时等待播放,所以用到了这个控件,可是当我在用Theard.Sleep()方法让进程睡眠之后,再播放下一首音乐的时候就起不到作用了。
不知道是什么原因?想了好久也没想到解决的办法,还请各们高手解决疑问。
为什么要Sleep()。WMP不是有提供暂停功能吗?
可是我暂停后,如果想过几秒让下一首播放,怎么播放呢?
System.Threading.Thread.Sleep(2000); this.axWindowsMediaPlayer1.URL = @"C:\Users\LinmoXK\Documents\Leve12\Topic-1\单词发音_1_Topic_1_Level_12.wav"; this.axWindowsMediaPlayer1.Ctlcontrols.play(); System.Threading.Thread.Sleep(2000); MessageBox.Show("sss"); this.axWindowsMediaPlayer1.URL = @"C:\Users\LinmoXK\Documents\Leve12\Topic-1\单词发音_2_Topic_1_Level_12.wav"; this.axWindowsMediaPlayer1.Ctlcontrols.play();
@Linmo: 有这种事,你调试跟代码有执行你播放的代码吗?
如上述代码,如果把MessageBox.Show()去掉,就只会执行第二个语音,但是添加上就会从第一个播放,这是什么原因?
@Linmo: MEssageBox会阻断消息传递、阻断代码继续执行。当show出来后,WMP这时已经开始play第一个语音,由硬件支持播放。如果不show,那么第二个语音会覆盖掉第一个语音吧。。。你想让线程休息可以使用Thread.SpinWait()..
@滴答的雨: 用Thread.SpinWait()也会把第一个覆盖掉的
@Linmo: 我看出来了,这个代码是执行完毕之后,才会让palyer播放,不是边播放边执行。可是如果我的播放列表中有好多音乐,可是我又想在上一个音乐播放完之后暂停2s之后接着播放下一个,这个要怎么实现?
@Linmo:
1、使用Thread.sleep(2000)
2、监听你的音乐合适播放完。你也可以这样
private void wmp_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
//如果已播放完毕就播放下一个文件
if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsReady) wmp.Ctlcontrols.play();
}
判断切换音乐后,Pause()+Thread.sleep(2000)
private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded) { //MessageBox.Show("释放1111"); axWindowsMediaPlayer1.Ctlcontrols.pause(); //System.Threading.Thread.Sleep(2000); } //} //if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsStopped) // System.Threading.Thread.Sleep(3000); // //MessageBox.Show("暂停了"); // axWindowsMediaPlayer1.Ctlcontrols.play(); }
@滴答的雨: 我入的音频文件都是3秒以内的,在加载的时候,都加载到了播放列表里,上网查了半天没找到怎么把那个自动播放和自动循环关掉,还有,我按你写的还是不行,但我改了一下,如果写成下面这样就有点效果
if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded) { //axWindowsMediaPlayer1.Ctlcontrols.pause(); System.Threading.Thread.Sleep(2000); }
在这里面用pause()是控制不了的。这样虽然有效果,但却是不是每一个都睡2秒,而是每两个,不知道是不是我的音频文件太短的原因
@滴答的雨:
settings.autoStart=false;也关不了自动播放,什么原因啊?
@Linmo: 这个不懂,也许跟播放模式有关,你看看有没有播放单曲的选项吧
//顺序播放
wmp.settings.setMode("shuffle", False)
//随机播放
wmp.settings.setMode("shuffle", True)
//循环播放
wmp.settings.setMode("loop", True)
大神,能问下,那个全屏怎么控制吗?为什么写了全屏之后不起作用呢?