C# WPF mediaElement在一段时间后消失

C# WPF mediaElement在一段时间后消失,c#,wpf,xaml,memory-leaks,mediaelement,C#,Wpf,Xaml,Memory Leaks,Mediaelement,我有一个带有WPF MediaElement的用户控件和一个图像控件。此用户控件再次用于其他几个用户控件,它们在两种不同的布局中使用此控件。应用程序应该以循环的方式显示一个长时间的视频和图像列表。每个用户控件将在特定的时间段内加载,在该时间段后,将卸载该控件并加载下一个控件。当视频偶尔运行时,视频的位置会更改以显示视频的特定部分 XAML代码。MediaElement位于一列一行的网格内 <MediaElement Volume="0" Name="m1" Stretch="Fill"

我有一个带有WPF MediaElement的用户控件和一个图像控件。此用户控件再次用于其他几个用户控件,它们在两种不同的布局中使用此控件。应用程序应该以循环的方式显示一个长时间的视频和图像列表。每个用户控件将在特定的时间段内加载,在该时间段后,将卸载该控件并加载下一个控件。当视频偶尔运行时,视频的位置会更改以显示视频的特定部分

XAML代码。MediaElement位于一列一行的网格内

 <MediaElement Volume="0" Name="m1" Stretch="Fill" Visibility="Hidden"  LoadedBehavior="Manual" UnloadedBehavior="Manual"  />
C#代码更改位置。此位置更改使用Dispatcher完成

            t = TimeSpan.FromMilliseconds(Position);
            mediaElement.Position = t;
处理MediaElement的C代码。我使用这段代码来处理MediaElement,因为之前我在播放一段时间后发现MediaElement占用了太多内存,过了一段时间就冻结了。。下面的代码修复了该问题

        mediaElement.Close();
        mediaElement = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();
应用程序工作正常,但问题是在一段时间(比如20分钟)之后WPF MediaElement消失了。应用程序运行平稳(不会冻结),图像显示,但MediaElement消失了

当这个问题发生时,我做了一些调试并发现了这些问题

  • WPF MediaElement可见性可见。源具有正确的文件名。MediaElement不隐藏在任何其他控件后面
  • 但是,实际宽度和实际高度显示为0
我检查了所有代码,以找出高度和宽度变为零的位置。但是找不到。因此,我决定尝试使用Dispatchermer每毫秒覆盖高度和宽度(只是为了检查是否可行)。但即便如此,实际高度和宽度的0仍然保持不变

此外,应用程序似乎没有使用过多的内存,其他一切似乎都很好


有人知道为什么会这样吗?有什么解决办法或变通办法吗?谢谢

您尝试过硬编码mediaElement的宽度和高度吗?@SaadAbdullah我尝试过硬编码,但仍然出现问题。您尚未将事件MediaOpen附加到mediaElement。这可能是GC问题,您检查过taskmanager、RAM的使用情况吗?…此外,我建议您切换到其他播放器,因为wpf mediaelement有缺陷…您可以在wpf中使用VLC绑定(wpf),它还为您提供了更大的灵活性,如读取视频帧和音频样本…我可以在没有代码的情况下猜测可能的问题…@SaadAbdullah ty,请回答。是的,我还没有附加MediaOpen事件。是否必须附加此事件?我还尝试删除GC部分,但问题仍然存在。然后我删除了媒体位置部分,然后它工作正常。所以最后我得出结论,这个问题是由于经常改变位置造成的。当视频位置频繁改变时,MediaElement中似乎发生了一些非常错误的事情。我正试图找到一个解决方案或解决办法。
        mediaElement.Close();
        mediaElement = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();