如何处理 System.Windows.Media.MediaPlayer

Sid*_* G. 5 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();
}
Run Code Online (Sandbox Code Playgroud)

我搜索了文档,发现没有办法处理这个对象,while 循环永远不会退出。

Tho*_*ler 2

令我惊讶的是,C# 文档和 Java 文档都没有清晰地描述它:

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

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

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

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

Wikipedia在Variations下找到了它(对于 Java,但 Java 和 C# 非常相似):

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