如何处置System.Windows.Media.MediaPlayer

时间:2015-05-28 19:25:35

标签: c#

问题很简单,可以概括为:

如何让这个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循环永远不会退出。

1 个答案:

答案 0 :(得分:2)

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

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

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

  

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

许可不是必需的。它可能会这样做,但它不需要。

Wikipedia Variations 下正确使用(对于Java,但Java和C#非常相似):

  

[...]如果GC认为JVM可以节省内存(例如JVM有大量未使用的堆空间),GC可能决定不这样做。