C# WMPLib经常停止播放

C# WMPLib经常停止播放,c#,backgroundworker,wmplib,C#,Backgroundworker,Wmplib,我使用以下方法播放MP3和M4A: private void playmp3(string path) { WMPLib.WindowsMediaPlayer a = new WMPLib.WindowsMediaPlayer(); a.URL = path; a.controls.play(); } 通常当我玩它们时,它们只玩大约5秒或更少,然后停止玩。如果我以任何方式与(WPF)表单交互,它也会停止。我从后台工作人员那里调用p

我使用以下方法播放MP3和M4A:

private void playmp3(string path)
    {
        WMPLib.WindowsMediaPlayer a = new WMPLib.WindowsMediaPlayer();
        a.URL = path;
        a.controls.play();
    }
通常当我玩它们时,它们只玩大约5秒或更少,然后停止玩。如果我以任何方式与(WPF)表单交互,它也会停止。我从
后台工作人员那里调用
playm3


编辑:在我移动鼠标后,它实际上停止播放大约十分之一秒

您还需要像这样在玩家状态中编码

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();
   }

用简单的方式。声明你是班级级别的玩家

 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();同样在类级别,每次调用该方法时,它都会创建一个新的player实例,并尝试停止或播放它,所以按如下方式执行

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();
    }
}

此处重复/找到了一个有用的答案: