我有一个带有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也保持不变 .
此外,应用程序似乎没有使用过多的内存,其他一切似乎都很好 .
有没有人知道为什么会这样?任何解决方案或解决方法?谢谢