我有以下内容的简单的用户控制:在Silverlight如何在声明的事件处理程序XAML未连线
<Grid x:Name="LayoutRoot">
<Button x:Name="btnOpenGenericPage" Click="btnOpenGenericPage_Click" Content="Open"/>
</Grid>
我了解Click事件处理程序中创建和有线起来 - 在InitializeComponent方法> .g.cs类的System.Windows.Application.LoadComponent方法被调用并完成所有魔术。
但是,一旦从VisualTree中删除了此控件,我似乎无法理解事件的未连线是否正在发生。如果是,谁照顾这个?有没有什么情况下,事件不会无线连接?有人可以解释一下这个问题吗?
非常感谢, 布鲁诺。
据我了解,EventHandler将持有对btnOpenGenericPage所在的UserControl的引用。鉴于此,因为如果我们不解除事件的关联,此参考文件将保持活跃状态,那么UserControl将如何确认GC?非常感谢! – Bruno 2010-08-27 08:55:28
@Bruno:引用“UserControl”的事件处理程序并不意味着它不能被收集。如果您无法通过引用全局级别引用的某个引用或一个线程堆栈中的某个引用来追踪该项目是否可以收集。例如,如果您有此循环引用UserControl-> Button-> ClickEvent-> UserControl,则可以收集'UserControl'和'Button',如果没有别的引用它们的话。它们互相引用并不重要,它们通过普通代码无法访问。 – AnthonyWJones 2010-08-27 16:12:56
嗨安东尼,感谢您的澄清,现在我似乎理解我手中的问题。干杯。 – Bruno 2010-08-27 16:19:08