C# WMP在关闭WMP窗体后继续播放

C# WMP在关闭WMP窗体后继续播放,c#,wmp,C#,Wmp,WMP通过Windows Designer嵌入到表单中。当我用WMP结束表单时,它不会停止播放。发生了什么?ReleaseComObjectd也不起作用,它会引发异常(mscorlib.dll中发生类型为“System.ArgumentException”的未处理异常) 其他信息:对象的类型必须是_ComObject或从_ComObject派生) 在案例10上设置断点。@HansPassant是的,它在窗体关闭时被捕获。但为什么WMP在调用WMP::close后尝试播放视频?当然是因为您要求它播

WMP通过Windows Designer嵌入到表单中。当我用WMP结束表单时,它不会停止播放。发生了什么?ReleaseComObjectd也不起作用,它会引发异常(mscorlib.dll中发生类型为“System.ArgumentException”的未处理异常)

其他信息:对象的类型必须是_ComObject或从_ComObject派生)


在案例10上设置断点。@HansPassant是的,它在窗体关闭时被捕获。但为什么WMP在调用WMP::close后尝试播放视频?当然是因为您要求它播放视频。您只处理了它的窗口,而不是底层播放器。直到它被垃圾收集并最终确定,它才会消失。别再要求它播放别的东西了。我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。当你说视频仍在播放时,你的意思是:1)过程仍在进行,2)你仍听到音频,和/或3)表单根本没有关闭?另请参阅我的相关但不重复的问题,如果有人回答,可能也适用于此处:
// OnClose handler
private void Watch_FormClosing(object sender, FormClosingEventArgs e)
{
    currentSerie.LastTime = player.Ctlcontrols.currentPosition; // update last time of current serie

    player.close(); // close player
    player.Dispose();
}

// WMP OnPLayStateChange handler
private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
    switch (e.newState)
    {
        case 1:    // Stopped
            trackingTimer.Stop();
            break;

        case 2:    // Paused
            trackingTimer.Stop();
            break;

        case 3:    // Playing
            trackingTimer.Start();
            break;

        case 6:    // Buffering
            trackingTimer.Stop();
            break;

        case 8:    // MediaEnded
            this.BeginInvoke((MethodInvoker)delegate { seriesList.SelectedIndex++; }); // let's go play next serie
            break;

        case 10:   // Ready
            // let's play file from the last played time
            this.BeginInvoke((MethodInvoker)delegate { player.Ctlcontrols.currentPosition = currentSerie.LastTime; player.Ctlcontrols.play(); });
            break;

        case 11:   // Reconnecting
            trackingTimer.Stop();
            break;
    }
}

private void seriesList_SelectedIndexChanged(object sender, EventArgs e)
{
    /* getting new video */
    player.URL = video.Url;
}