我有一个 WPF MainWindow,可以在 StackPanel 中更改(导航)UserControl:
// on code behind of MainWindow
RootStackPanel.Children.Clear();
UserControl1 uc1= new UserControl1();
uc1.CustomizedEvent1+= EventHandler1;
uc1.CustomizedEvent2+= EventHandler2;
uc1.Loaded += (s, e1) =>
{
// Do something
};
// Unsubscribe external event to prevent memory leak
uc1.Unloaded += (s, e1) =>
{
uc1.CustomizedEvent1 -= EventHandler1;
uc1.CustomizedEvent2 -= EventHandler2;
};
RootStackPanel.Children.Add(uc1);
// same for UserControl 2,3,4....
应用程序将在运行几个小时后崩溃,所以我添加了带有匿名委托的 Unloaded 事件处理程序,以通过取消订阅 UserControl 的所有事件来防止内存泄漏。Unloaded with Anonymous Delegate 会导致内存泄漏吗?如果是,如何在不调用 Unloaded 的情况下取消订阅 UserControl 的所有事件?
我记得像 Loaded, Unloaded 这样的内部事件会被 GC 处理,对吧?
匿名代表何时处置?
谢谢大家。