我有一个带有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已消失。
发生这个问题时,我做了一些调试并找到了这些。
我检查了所有代码,找出高度和宽度变为零的位置。但找不到任何东西。所以我决定尝试使用DispatcherTimer覆盖高度和宽度evey毫秒(只是为了检查是否可能)。但即便如此,实际高度和宽度的0也保持不变。
此外,应用程序似乎没有使用过多的内存,其他一切似乎都没问题。
有没有人知道为什么会这样?任何解决方案或解决方法?感谢