0

これは本当にイライラします: 私は以前 、EF で IDisposable を使用する Entity Framework を参照してこの質問を投稿しましたが、そのエラーはなくなりましたが、これを明確にすることはできません:

protected void Page_Init(object sender, EventArgs e)
    {
        try
        {
            String testCondition = Request.QueryString["Type"];
                switch (testCondition)
                {
                    case "A":
                        using (var rpt = new Report())
                        {
                         List<Class> lst= new ActionDBOClass.ActionMethod();    
                         // other code for crstal report view
                         //setting datasource of the same report
                        }
                        break;
                }
         }
    }

しかし、その後、 ActionMethod に dispose を実装する必要があるという警告も表示されます(実際には、次のように同じクラスで Idisposable 実装を行いました。

 public class ActionDBOClass:IDisposable
{
    private bool _disposed = true;
    public void Dispose()
    {
        Dispose(_disposed);
        GC.SuppressFinalize(this);
    }
    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                context.Dispose();
                // Dispose other managed resources.
            }
            //release unmanaged resources.
        }
        _disposed = true;
    }

他に何をする必要がありますか?私は同様のスイッチケースを持っていますが、これは私が最初に見せたものです。

4

1 に答える 1

0

Page_Init メソッドの外で lst を使用しない場合は、戻る前に lst.Dispose() を呼び出します。何かのようなもの:

case "A":
    using (var rpt = new Report())
    {
    List<Class> lst= new ActionDBOClass.ActionMethod();    
    // other code for crstal report view
    //setting datasource of the same report
    lst.Dispose();
    }
    break;

より安全な方法は、using(List lst = new ActionDBOClass.ActionMethod()){... のようなことを行うことです。これにより、例外がスローされた場合に確実に Dispose が呼び出されるか、try ブロックの外側で lst を宣言して Dispose を呼び出すことができます。 lst != null の場合、finally ブロックで。

于 2013-03-02T14:39:20.370 に答える