WPF mediaElement在一段时间后消失了

时间:2015-11-05 04:14:56

标签: c# wpf xaml memory-leaks mediaelement

我有一个带有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也保持不变。

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

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

0 个答案:

没有答案