【问题标题】:WMPLib often stops playingWMPLib 经常停止播放
【发布时间】:2012-12-30 06:38:50
【问题描述】:
我用以下方法播放mp3和m4as:
private void playmp3(string path)
{
WMPLib.WindowsMediaPlayer a = new WMPLib.WindowsMediaPlayer();
a.URL = path;
a.controls.play();
}
通常当我播放它们时,它们只会播放大约 5 秒或更短的时间然后停止播放。如果我以任何方式与(WPF)表单交互,它也会停止。我从BackgroundWorker 拨打playmp3。
编辑:它实际上在我移动鼠标后停止播放大约十分之一秒。
【问题讨论】:
标签:
c#
backgroundworker
wmplib
【解决方案1】:
您还需要像这样在播放器状态下编写代码。
Player = new WMPLib.WindowsMediaPlayer();
Player.PlayStateChange +=
new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange);
Player.MediaError +=
new WMPLib._WMPOCXEvents_MediaErrorEventHandler(Player_MediaError);
Player.URL = "FC.wav";
Player.controls.play();
private void Player_PlayStateChange(int NewState)
{
if ((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsStopped)
{
}
}
private void Player_MediaError(object pMediaObject)
{
MessageBox.Show("Cannot play media file.");
this.Close();
}
【解决方案2】:
以简单的方式。在班级级别声明您的玩家。
WMPLib.WindowsMediaPlayer a;
private void playmp3(string path)
{
a = new WMPLib.WindowsMediaPlayer();
a.URL = path;
a.controls.play();
}
这样你就可以轻松解决问题了
如果您使用相同的方法停止播放,则在其中使用 if 条件,就像这样
private void playmp3(string path)
{
a = new WMPLib.WindowsMediaPlayer();
a.URL = path;
a.controls.play();
}
您需要添加新的 WMPLib.WindowsMediaPlayer();同样在类级别,否则每次调用该方法时它都会创建一个新的播放器实例并尝试停止或播放它,所以这样做。
WMPLib.WindowsMediaPlayer a= new WMPLib.WindowsMediaPlayer();
private void playmp3(string path, string playState)
{
a.URL = path;
if(playstate.Equals("Play))
{
a.controls.play();
}
else if (playState.Equals("Stop"))
{
a.controls.stop();
}
}