0

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 の後にコンボボックスを参照しない amend でメモリ エラーが引き続き発生します。

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;
   }
4

1 に答える 1

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;
  }

}

これはうまくいくようです

于 2013-11-05T09:06:57.290 に答える