如何处理 Windows 媒体播放器控件(即 axWindowsMediaPlayer)然后再次使用它?

Posted

技术标签:

【中文标题】如何处理 Windows 媒体播放器控件(即 axWindowsMediaPlayer)然后再次使用它?【英文标题】:How to dispose windows media player control (i.e axWindowsMediaPlayer) then use it again? 【发布时间】:2014-03-22 10:56:40 【问题描述】:

我有一个 Windows 应用程序,主窗体 (mainform.cs) 包括可以从主菜单中删除/添加的用户控件(即用户可以从主菜单中关闭用户控件,用户控件是选项卡控件中的选项卡内的布局) 何时关闭用户控件,我这样调用 dispose:

If (!MediaControl.IsDisposed)
     MediaControl.Dispose();

其中一个用户控件包括用于播放媒体的 axWindowsMediaPlayer 控件。 当应用程序启动时,它会成功加载该媒体用户控件,并且能够毫无问题地播放媒体(添加媒体文件,更改播放列表项,播放,暂停......等所有工作) 当我从主菜单关闭该用户控件时,媒体成功关闭。 但是当尝试再次添加它时,我收到了这条消息:

"附加信息:已与其分离的 COM 对象 无法使用底层 RCW。”

尝试初始化播放列表时 VS 调试中断:

    // Within media usercontrol
    protected override void OnFilesRefresh()
                
        foreach (string file in files)
        
            WMPLib.IWMPMedia m1 = axWindowsMediaPlayer.newMedia(file);
            axWindowsMediaPlayer.currentPlaylist.appendItem(m1);
            .....
        
    

而 files 是文件路径数组。 newMedia 方法导致了问题。 如何处理可能包含 axWindowsMediaPlayer 的媒体用户控件然后再次初始化它而没有问题? 对不起我的英语

【问题讨论】:

在发布问题之前搜索 SO。您可能无法得到准确的答案,但几乎可以找到一个。 【参考方案1】:

稍微搜索了一下,发现问题描述在这里:

Is it safe to call an RCW from a finalizer?

这里:

Release Excel Object In My Destructor

他们有同样的问题, 希望对您有所帮助。

【讨论】:

竟然发现这篇文章Default VSPackage template in VS2013 SDK Throws Exception when exiting 感谢它的工作,我所要做的就是使用 Marshal.FinalReleaseComObject(player.currentMedia);播放列表对象也一样。

以上是关于如何处理 Windows 媒体播放器控件(即 axWindowsMediaPlayer)然后再次使用它?的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin Forms 的 Telerik ListView 中,如何处理 Windows 上元素的右键单击事件?

控件如何处理该控件之外的鼠标单击?

如何处理以编程方式添加的按钮事件? C#

Java+Selenium——如何处理日历控件——方法一

Firebase Analytics 如何处理后台活动的会话持续时间(mp3 播放器)

使用 DataGridView 控件和 Access 数据库查询时如何处理错误?