System.Windows.Controls.ComboBox和dispose

时间:2013-10-28 10:00:27

标签: c# windows combobox controls dispose

我有一个xaml定义的ComboBox:                                 

我填充此ComboBox(Name1)然后进行更新。我得到了内存泄漏。从Web上的研究来看,这个ComboBox需要处理,但我找不到System.Windows.Control.ComboBox的方法参考。人口来自于近距离处理的数据库。

使用VS2010 / 2012和c#。 我已尝试在类中使用Dispose内联,错误消息显示Dispose没有System.Windows.Control.Combobox的定义。

disposecombobox中的

代码永远不会被操作。

我尝试过使用IDisposable,但都无济于事。 IDisposable已应用于包含更新代码的类以及disposecombobox。

OnselectedItemChanged被重复使用,但不是(我不认为)一个类,我怀疑它会导致错误。

在button_update上执行单击更新操作,并在删除或插入时引用组合框。但是在修改时仍然会发生内存错误,这在onSelectedItemChanged之后没有引用组合框。

我刚刚将Name1.Dispose更改为disposecombobox.Dispose(),现在得到错误:        非静态字段,方法或属性'WpfApplication1.disposecombobox.Dispose()'

需要对象引用 我是在正确的路线吗?如果有的话有什么不对?

我该如何解决?

我的代码:

<ComboBox x:Name="Name1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="286"
 Margin="331,118,0,0" Height="30" IsDropDownOpen="True" Grid.Row="0" MaxDropDownHeight="60"
 MinHeight="5" FontSize="20" SelectionChanged ="Name1_SelectedItemChanged"
 TextBoxBase.TextChanged="Name1_TextChanged" IsEditable="True" IsReadOnly="False" TabIndex="1" />

Name1.Dispose(); 

public class disposecombobox
{ 
    private System.ComponentModel.Container components = null;
    bool disposed; 
public void Dispose()
   {
    this.Dispose(true);
    GC.SuppressFinalize(this);
   }
    protected virtual void Dispose(bool disposing)
    { 
       if (!disposed) 
       { 
           if (disposing) 
           { 
              if (components != null) 
              { 
                  components.Dispose(); 
              } 
           } 
       disposed = true;
   }

1 个答案:

答案 0 :(得分:0)

use xaml code above

in codebehind
using System.ComponentModel;

define class myclass :Idisposable
{
private System.ComponentModel.Container components = null;
bool disposed;
method1
{
     code
}
method
{
     code
}

myclass newobj = new myclass();
newobj.Dispose();

public void Dispose()
{
   this.Dispose(true);
   GC.SuppressFinalize(this);
}
public virtual void Dispose(bool disposing)
{
   if (!disposed)
   {
       if (disposing)
       {
           if (components != null)
           {
              components.Dispose();
           }
       }
            disposed = true;
       }
  }
  public interface IDisposable
  {
      void Dispose();
  }

  protected bool IsDisposed
  {
      get;
      private set;
  }

}

这似乎有用