我有以下內容的簡單的用戶控制:在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