日期:2014-05-18  浏览次数:21032 次

WindowsMediaPlayer组件的问题
private void button1_Click(object sender, EventArgs e)
  {
  aaa:
 //MessageBox.Show(axWindowsMediaPlayer1.playState.ToString());//测试点1
  axWindowsMediaPlayer1.URL = @"e:\123.mp3";
  axWindowsMediaPlayer1.Ctlcontrols.play();
 //MessageBox.Show(axWindowsMediaPlayer1.playState.ToString());//测试点2
  while (axWindowsMediaPlayer1.playState.ToString() == "wmppsStopped") ;//等待一首歌结束(播放状态为wmppsStopped)
  {
 //MessageBox.Show(axWindowsMediaPlayer1.playState.ToString());//测试点3
  }
  goto aaa;
  }

本来想实现,放完一首歌,返回去继续再播放这首歌,发现一点button1就死了
1、加了几个测试点,发现,不管播放状态如何while (axWindowsMediaPlayer1.playState.ToString() == "wmppsStopped")居然都成立,即都执行下面的goto aaa;很奇怪。
2、测试点2的弹出窗口等到放完一首歌(播放器状态真正到wmppsStopped)的时候再点的时候,人为创造while (axWindowsMediaPlayer1.playState.ToString() == "wmppsStopped")成立的条件,程序居然卡死了,窗口有时能拖动有时不能拖动。猜测可能这时候真的在一直while了。

新手,烦请大家看下什么原因,再给个解决办法,或者实现功能的方式

------解决方案--------------------
while当然死啦
你需要相应statechanged事件,通过事件得到一首播放完成的消息
------解决方案--------------------
外侧的goto倒是可以改写成while(true);