In WPF: Children.Remove or Children.Clear doesn't free objects
        Posted  
        
            by Bart Roozendaal
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Bart Roozendaal
        
        
        
        Published on 2010-03-29T22:31:31Z
        Indexed on 
            2010/03/29
            22:33 UTC
        
        
        Read the original article
        Hit count: 1632
        
I create some UIElements from code behind and was anticipating the garbage collection to clear up stuff. However, the objects are not free-ed at the time I expected it. I was expecting them to be freeed at RemoveAt(0), but they are only freed at the end of the program.
How can I make the objects be freed when removed from the Children collection of the Canvas?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
    MouseDown="Window_MouseDown">
  <Grid>
    <Canvas x:Name="main" />
  </Grid>
</Window>
The code behind is:
public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();
  }
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
  if (main.Children.Count == 0)
    main.Children.Add(new MyControl() { Background = Brushes.Yellow, Width = 100, Height = 50 });
  else
    main.Children.RemoveAt(0);
 }
}
public class MyControl : UserControl
{
  ~MyControl()
  {
    Debug.WriteLine("Goodbye");
  }
}
        © Stack Overflow or respective owner