C# 事件处理程序和GC。阅读与stackoverflow相反的答案

C# 事件处理程序和GC。阅读与stackoverflow相反的答案,c#,silverlight,data-binding,C#,Silverlight,Data Binding,我刚才读过。这正是我要问的问题。我尝试了答案中提出的实验。答案是正确的,它们是通过显式GC收集的 然而,这导致了另外两个问题: 这似乎与stackoverflow上关于事件处理程序和GC的两个线程相矛盾:。他们错了吗 这是如何实现的?我记得Java中有一种叫做弱引用的东西。有什么关系吗 以下是对问题的一些澄清: 只有当发布者不再存在时,GC才有可能是常识。但这一常识与的答案中的实验相矛盾,该实验证明了Silverlight UI对PropertyChanged事件的订阅在且仅在垃圾收集发生时停

我刚才读过。这正是我要问的问题。我尝试了答案中提出的实验。答案是正确的,它们是通过显式GC收集的

然而,这导致了另外两个问题:

  • 这似乎与stackoverflow上关于事件处理程序和GC的两个线程相矛盾:。他们错了吗
  • 这是如何实现的?我记得Java中有一种叫做弱引用的东西。有什么关系吗

  • 以下是对问题的一些澄清:


    只有当发布者不再存在时,GC才有可能是常识。但这一常识与的答案中的实验相矛盾,该实验证明了Silverlight UI对PropertyChanged事件的订阅在且仅在垃圾收集发生时停止存在。我相信事实多于常识。但这一事实如何解释呢?威克瑞夫

    两个相关问题的答案并不矛盾;由于事件订阅是实例方法的委托,因此事件发布服务器维护对订阅服务器的间接引用,因此在发布服务器符合收集条件之前,订阅服务器将不符合收集条件。第二个链接答案仅仅意味着垃圾收集器足够聪明,可以处理循环引用(因为GC的操作基于“GC根”的可达性,而不是简单的引用计数)

    如果您要问的是基于XAML的环境(如Silverlight或WPF)如何在UI元素仍然绑定到非可视元素的情况下对其进行垃圾收集,那么答案就在于XAML绑定是如何工作的


    XAML绑定使用其绑定源上的
    WeakReference
    类型允许对该对象进行垃圾收集,这有可能过分简化实际非常复杂的系统(整个XAML绑定);由于事件订阅是实例方法的委托,因此事件发布服务器维护对订阅服务器的间接引用,因此在发布服务器符合收集条件之前,订阅服务器将不符合收集条件。第二个链接答案仅仅意味着垃圾收集器足够聪明,可以处理循环引用(因为GC的操作基于“GC根”的可达性,而不是简单的引用计数)

    如果您要问的是基于XAML的环境(如Silverlight或WPF)如何在UI元素仍然绑定到非可视元素的情况下对其进行垃圾收集,那么答案就在于XAML绑定是如何工作的


    XAML绑定使用其绑定源上的
    WeakReference
    类型来允许对该对象进行垃圾收集。

    对于(1)的公认答案有53次投票。它出错的可能性有多大?(特别是考虑到经常访问这个网站的人的能力)。@MitchWheat我完全同意你关于两个人回答这些问题的看法。但是,当且仅当垃圾收集发生时,Silverlight UI对PropertyChanged事件的订阅怎么可能停止存在呢?对于那些试图解决这个问题的人来说。请先阅读我的问题,然后再尝试关闭它!并留下评论来证明你的决定是正确的。被接受的答案(1)有53票赞成。它出错的可能性有多大?(特别是考虑到经常访问这个网站的人的能力)。@MitchWheat我完全同意你关于两个人回答这些问题的看法。但是,当且仅当垃圾收集发生时,Silverlight UI对PropertyChanged事件的订阅怎么可能停止存在呢?对于那些试图解决这个问题的人来说。请先阅读我的问题,然后再尝试关闭它!并留下评论来证明您的决定。只有当发布者不再存在时,gc才有可能做出这样的决定,这是常识。但这一常识与的答案中的实验相矛盾,该实验证明了Silverlight UI对PropertyChanged事件的订阅在且仅在垃圾收集发生时停止存在。我相信事实多于常识。但这一事实如何解释呢?韦克雷夫?@Gene:这不仅仅是常识,而是事实。我已经在我的答案中添加了关于Xaml绑定细节的信息,但是您给出的答案中没有一个是相互矛盾的。只有当发布者不再存在时,gc才有可能做到这一点是常识。但这一常识与的答案中的实验相矛盾,该实验证明了Silverlight UI对PropertyChanged事件的订阅在且仅在垃圾收集发生时停止存在。我相信事实多于常识。但这一事实如何解释呢?韦克雷夫?@Gene:这不仅仅是常识,而是事实。我已经在我的答案中添加了关于Xaml绑定细节的信息,但是您给出的答案中没有一个是矛盾的。