C# MediaElement在新介质加载时可能内存泄漏?

C# MediaElement在新介质加载时可能内存泄漏?,c#,wpf,list,memory-leaks,mediaelement,C#,Wpf,List,Memory Leaks,Mediaelement,我正在为c#中的媒体播放器开发WPF应用程序,并使用mediaElement控件来承载媒体 由于我希望用户能够在播放机中加载视频和图像,因此我在mediaOpened事件中做了一个简单的if-then-else语句,以检查每次加载新媒体时,它是否快速移动(因此播放机将其视为视频)或视为图片 为了检查这个if/else语句是否有效,我在每种情况下都放置了一个消息框,以向我提供反馈,使播放机能够正确识别媒体类型 到目前为止还不错 我加载了一个视频,一切都按预期进行,我的信息框显示“视频!” 但当我加

我正在为c#中的媒体播放器开发WPF应用程序,并使用mediaElement控件来承载媒体

由于我希望用户能够在播放机中加载视频和图像,因此我在mediaOpened事件中做了一个简单的if-then-else语句,以检查每次加载新媒体时,它是否快速移动(因此播放机将其视为视频)或视为图片

为了检查这个if/else语句是否有效,我在每种情况下都放置了一个消息框,以向我提供反馈,使播放机能够正确识别媒体类型

到目前为止还不错

我加载了一个视频,一切都按预期进行,我的信息框显示“视频!”

但当我加载第二个视频时,消息框会出现两次

当我再加载一个视频时,消息框会出现3次

更奇怪的是,如果我接下来加载一张图片,消息框会出现4次,而不是像这样的一系列消息框

“视频!”“视频!”“图片!”,我明白了

“图片!”“图片!”“图片!”“图片!”

播放器似乎在某种列表中存储媒体(或MediaOpen事件),每次我加载新媒体时,它都会检查该列表中的所有媒体,并为每个媒体发送消息。(我还没有写任何代码来支持播放列表功能,所以我不知道这些媒体可以存储在哪里…)

我尝试在用户按下加载新媒体按钮时将mediaElement的源声明为null,以确保在加载新媒体之前mediaElement源是干净的,但没有任何效果

这听起来像是内存泄漏吗? 我是否错过了一个我应该在更换媒体时调用的特定卸载事件?
谢谢大家!

因此,在大多数关于如何开发mediaplayer的在线示例中

每个人都建议在单击播放器中的加载按钮时使用下一行:

mediaElement.MediaOpened+=新路由EventHandler(mediaElement_MediaOpened)

但是,似乎没有人知道,在加载新介质时需要卸载这些介质,在设置介质元素的新源之前,可以通过放置完全相反的位置来卸载这些介质,因此其顺序如下,例如:

mediaElement.MediaOpened-=新路由EventHandler(mediaElement_MediaOpened)

mediaElement.Source=新Uri(dlg.FileName)

mediaElement.MediaOpened+=新路由EventHandler(mediaElement_MediaOpened)


希望这能帮助别人

不需要这样做,只需将订阅(
+=
)放在构造函数中,而不是单击按钮,然后只需单击
mediaElement.Source=newURI(dlg.FileName),无
+=
-=