3
有誰知道如何解決與ChildWindow SL3內存泄漏?Silverlight的ChildWindow內存泄漏
請參考下面的代碼片段:
private void Button_Click(object sender, RoutedEventArgs e)
{
var window = new ChildWindow();
window.Closed += new EventHandler(window_Closed);
window.Show();
}
void window_Closed(object sender, EventArgs e)
{
((ChildWindow)sender).Closed -= new EventHandler(window_Closed);
WeakReference reference = new WeakReference(sender);
GC.Collect();
GC.WaitForPendingFinalizers();
bool isControlAlive = a.IsAlive;
}
它總是顯示爲還「活着」 - 當我監視任務管理器中IEXPLORE實例 - 內存繼續增加每次我打開和關閉兒童窗口。
請幫忙。
謝謝。
Chris
注意,它可能比只是導致問題GotFocus事件更多。 SizeChanged事件也似乎是一個罪魁禍首.. – 2010-05-17 19:25:24
我讀了關於GotFocus事件的評論 - 沒有意識到SizeChanged事件。所以它基本上是一個需要取消訂閱的事件處理程序 - 它只是通過ChildWindow類的代碼來查明它是哪個事件? – Chris 2010-05-17 19:54:52
這個問題似乎在Silverlight 5中得到解決。在System.Windows.Controls.ChildWindow類中有'private bool _attachedRootVisualListener'字段,它在訂閱'RootVisual_GotFocus'之前被檢查。 – apdevelop 2014-03-11 09:10:58