C# 为什么windows media player不使用player.Close()方法关闭?

C# 为什么windows media player不使用player.Close()方法关闭?,c#,windows-media-player,wmplib,C#,Windows Media Player,Wmplib,我正在一个简单的控制台应用程序中创建一个媒体播放器对象,以播放一些文件。虽然媒体播放器已成功启动,但当我使用close()方法时,进程仍在运行,并且媒体播放器窗口未关闭。需要做什么?这是我写的代码 WindowsMediaPlayer player= new WindowsMediaPlayer(); player.OpenPlayer("c:\\abc.wmv"); Thread.Sleep(2000); player.controls.stop(); player.close(); 在这里

我正在一个简单的控制台应用程序中创建一个媒体播放器对象,以播放一些文件。虽然媒体播放器已成功启动,但当我使用close()方法时,进程仍在运行,并且媒体播放器窗口未关闭。需要做什么?这是我写的代码

WindowsMediaPlayer player= new WindowsMediaPlayer();
player.OpenPlayer("c:\\abc.wmv");
Thread.Sleep(2000);
player.controls.stop();
player.close();

在这里,进程不会退出,文件仍在运行。如何关闭应用程序?

我认为您需要通过调用Marshal.ReleaseComObject来关闭COM对象。COM不知道您将永远不会再次使用播放机,因此它无法关闭进程


不要依赖垃圾收集,因为如果没有内存压力,它可能永远不会发生。手动调用Marshal.ReleaseComObject。

自动界面无法强制播放器退出。不太理想的方法是杀死它:

        var prc = Process.GetProcessesByName("wmplayer");
        if (prc.Length > 0) prc[prc.Length - 1].Kill();

更好的鼠标陷阱是将播放器嵌入到您自己的GUI中,这很容易用Winforms实现。

我也尝试过。但它仍然没有退出流程。“媒体播放器”窗口仍在运行该文件。不确定为什么stop()方法在上述场景中也不起作用。。但是,我尝试了stop()工作的其他方法。像Player.URL=“c:\\abc.wmv”;player.controls.play();player.controls.stop();但这里的问题是没有显示窗口。我只能听到你需要处理所有COM对象的声音。也许你有一个子对象,比如player.playlist?您访问过的任何内容都可能导致此问题。尝试调用GC.Collect()和GC.WaitForPendingFinalizer()并查看问题是否消失。尝试以下操作:Marshal.ReleaseComObject(新WindowsMediaPlayer())。进程还没有退出吗?是的。close()不会退出。根据文档,“此方法关闭当前数字媒体文件,而不是Windows media Player本身。”。在退出进程时,我似乎找不到任何其他内容。我根本不确定这是否有效,但请尝试Environment.Exit(exitCode)。确保您具有SecurityPermissionFlag.UnmanagedCode权限。就像我说的,我不知道它是否有效,但值得一试。