如何处理System.Windows.Media.MediaPlayer

本文关键字:System Windows Media MediaPlayer 处理 何处理 | 更新日期: 2023-09-27 17:51:05

这个问题很简单,可以总结为:

如何让这个while循环退出?

System.Windows.Media.MediaPlayer player = new System.Windows.Media.MediaPlayer();
WeakReference test = new WeakReference(player);
player.Close();
player = null;
while (test.IsAlive && test.Target != null)
{
    System.GC.Collect();
}

我已经搜索了文档,没有找到处理这个对象的方法,while循环永远不会退出。

如何处理System.Windows.Media.MediaPlayer

我很惊讶c#文档和Java文档都没有这么清楚地描述它:

如果没有内存压力,则不会收集WeakReference。

这篇MSDN文章可能会有所帮助:

弱引用允许垃圾收集器在收集对象的同时仍然允许应用程序访问该对象。

权限不是必需的。它可能这样做,但它不需要。

维基百科把它放在变体下面(对于Java,但是Java和c#非常相似):

[…如果GC认为JVM可以腾出内存(例如JVM有很多未使用的堆空间),它可能会决定不这样做