如何处理 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 上元素的右键单击事件?