C# MediaElement在新介质加载时可能内存泄漏?
我正在为c#中的媒体播放器开发WPF应用程序,并使用mediaElement控件来承载媒体 由于我希望用户能够在播放机中加载视频和图像,因此我在mediaOpened事件中做了一个简单的if-then-else语句,以检查每次加载新媒体时,它是否快速移动(因此播放机将其视为视频)或视为图片 为了检查这个if/else语句是否有效,我在每种情况下都放置了一个消息框,以向我提供反馈,使播放机能够正确识别媒体类型 到目前为止还不错 我加载了一个视频,一切都按预期进行,我的信息框显示“视频!” 但当我加载第二个视频时,消息框会出现两次 当我再加载一个视频时,消息框会出现3次 更奇怪的是,如果我接下来加载一张图片,消息框会出现4次,而不是像这样的一系列消息框 “视频!”“视频!”“图片!”,我明白了 “图片!”“图片!”“图片!”“图片!” 播放器似乎在某种列表中存储媒体(或MediaOpen事件),每次我加载新媒体时,它都会检查该列表中的所有媒体,并为每个媒体发送消息。(我还没有写任何代码来支持播放列表功能,所以我不知道这些媒体可以存储在哪里…) 我尝试在用户按下加载新媒体按钮时将mediaElement的源声明为null,以确保在加载新媒体之前mediaElement源是干净的,但没有任何效果 这听起来像是内存泄漏吗? 我是否错过了一个我应该在更换媒体时调用的特定卸载事件?C# MediaElement在新介质加载时可能内存泄漏?,c#,wpf,list,memory-leaks,mediaelement,C#,Wpf,List,Memory Leaks,Mediaelement,我正在为c#中的媒体播放器开发WPF应用程序,并使用mediaElement控件来承载媒体 由于我希望用户能够在播放机中加载视频和图像,因此我在mediaOpened事件中做了一个简单的if-then-else语句,以检查每次加载新媒体时,它是否快速移动(因此播放机将其视为视频)或视为图片 为了检查这个if/else语句是否有效,我在每种情况下都放置了一个消息框,以向我提供反馈,使播放机能够正确识别媒体类型 到目前为止还不错 我加载了一个视频,一切都按预期进行,我的信息框显示“视频!” 但当我加
谢谢大家! 因此,在大多数关于如何开发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)代码>,无+=
或-=