我正在尝试实现将无数次循环当前歌曲的代码。
那是我的代码:
private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (e.newState == 8) // media ended
{
if (repeat)
{
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = 0;
//axWindowsMediaPlayer1.Ctlcontrols.previous();
//axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.Ctlcontrols.currentItem);
}
}
}
currentPosition = 0
如果我在下一行调试代码,设置工作正常。
但是在调试之后 - 触发了新事件(事件 9(过渡),然后是事件 3(播放)),下一首歌曲开始播放!
我该如何防止这种情况发生?
基本上这就是现在发生的事情:
- 事件 8 触发(媒体结束)
- 设置位置 0
- 事件 9 触发(过渡)
- 事件 3 触发(播放中)
编辑:在弄乱了我的代码之后,我终于设法打破了事件更改链。
public bool ended = false;
public WMPLib.IWMPMedia latest_song;
private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (ended)
{
axWindowsMediaPlayer1.Ctlcontrols.playItem(latest_song);
ended = false;
return;
}
if (e.newState == 8) // media ended
{
if (repeat)
{
ended = true;
latest_song = axWindowsMediaPlayer1.Ctlcontrols.currentItem;
}
}
}
我不知道代码是否可以比这更好..