如何在WPF中更改选项卡时使用可用内存来配置用户控件

时间:2013-02-20 06:35:30

标签: wpf user-controls garbage-collection infragistics

我正在使用infragistics TabGroupPane。在这种情况下,当ContentPane处于活动状态时,我正在使用用户控件并删除以前活动的选项卡内容。 这是我的代码Xaml:

<igDock:DocumentContentHost>
                <igDock:SplitPane>
                    <igDock:TabGroupPane x:Name="tabMainMenu" SelectionChanged="xamMainTab_SelectionChanged" AllowDrop="False">
                        <igDock:ContentPane x:Name="tabItem1"  Header="Item 1"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem2"  Header="Item 2"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem3"  Header="Item 3"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem4"  Header="Item 4"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem5"  Header="Item 5"></igDock:ContentPane>
                    </igDock:TabGroupPane>
                </igDock:SplitPane>
            </igDock:DocumentContentHost>

和代码behide side

private void xamMainTab_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {             
        if (e.RemovedItems.Count > 0 && null != e.RemovedItems[0] as ContentPane)
        {
            (e.RemovedItems[0] as ContentPane).Content = null;
        }
        GC.Collect();
        ContentPane selectedTab = this.tabMainMenu.SelectedItem as ContentPane;         
        BindContainer(selectedTab.Name);
    }
private void BindContainer(string item)
    {
        switch (item)
        {
            case "tabItem1":
                this.tabItem1.Content = new UserControls.UserControl1();
                this.tabMainMenu.SelectedItem = this.tabItem1;
                break;
            case "tabItem2":
                this.tabItem2.Content = new UserControls.UserControl2();
                this.tabMainMenu.SelectedItem = this.tabItem2;
                break;
            case "tabItem3":                    
        this.tabItem3.Content = new UserControls.UserControl3();
                this.tabMainMenu.SelectedItem = this.tabItem3;
                break;
            case "tabItem4":
                this.tabItem4.Content = new UserControls.UserControl4();
                this.tabMainMenu.SelectedItem = this.tabItem4;
                break;
            case "tabItem5":                    
                this.tabItem5.Content = new UserControls.UserControl5();
                this.tabMainMenu.SelectedItem = this.tabItem5;
                break;
            default:
                this.tabItem1.Content = new UserControls.UserControl1();
                this.tabMainMenu.SelectedItem = this.tabItem1;
                break;
        }
    }

这里我将最后一项的内容设置为null。(e.RemovedItems [0] as ContentPane).Content = null; 但在那种情况下,内存(大小)不会释放。然后我使用GC.Collect,这次有些内存是免费的。 这是写空闲内存或任何其他方式的方式然后请提供给我任何参考。并且在这种情况下,当我的用户控件包含WebBrowser时,如果我使用GC.collect内存不会释放,请指导我这一点。< / p>

由于

0 个答案:

没有答案