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

XAML代码 . MediaElement位于Grid中,有一列和一行 .

<MediaElement Volume="0" Name="m1" Stretch="Fill" Visibility="Hidden"  LoadedBehavior="Manual" UnloadedBehavior="Manual"  />

C#代码,设置源代码

this.mediaElement.Source = item.Path;
            this.mediaElement.Position = new TimeSpan(0, 0, 0);
            this.mediaElement.Play();

C#代码更改位置 . 使用DispatcherTimer完成此位置更改

t = TimeSpan.FromMilliseconds(Position);
            mediaElement.Position = t;

C#代码处理MediaElement . 我使用此代码处理MediaElement,因为之前我发现在播放一段时间后MediaElement使用了太多内存并在一段时间后变得冻结 . 下面的代码修复了这个问题 .

mediaElement.Close();
        mediaElement = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();

该应用程序工作正常,但问题是在一段时间后(如20分钟)WPF MediaElement消失 . 应用程序运行顺畅(它不会被冻结),图像显示,但MediaElement消失了 .

出现这个问题时,我做了一些调试并找到了这些 .

  • WPF MediaElement可见性是可见的 . Source具有正确的文件名 . MediaElement不会隐藏在任何其他控件之后 .

  • 但实际宽度和实际高度显示为0 .

我检查了所有代码,找出高度和宽度变为零的位置 . 但找不到任何东西 . 所以我决定尝试使用DispatcherTimer覆盖高度和宽度evey毫秒(只是为了检查是否可能) . 但即便如此,实际高度和宽度的0也保持不变 .

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

有没有人知道为什么会这样?任何解决方案或解决方法?谢谢