.NET WinForms应用程序不发布组件?

时间:2009-11-06 20:07:31

标签: c# .net components dispose

我正在使用C#中的.NET 2.0 WinForms应用程序。

我注意到在我的应用程序拆除过程中我认为有些奇怪。在设计器生成的dispose方法中:

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    } 

disposing = false确实包含某些项目时,我看到它传入components参数的情况。这使我相信这些资源没有得到正确/释放,因为components.Dispose();没有被调用。这是不可取的行为吗?

感谢。

3 个答案:

答案 0 :(得分:4)

如果从终结器调用disposing,则Dispose(bool)参数将作为false传递。通常,这会在未调用Dispose()时发生。


Dispose(bool)方法实际上不是IDisposable的一部分;它由IDisposable.Dispose()Object.Finalize()使用。惯例是IDisposable.Dispose()将致电Dispose(true)Object.Finalize()将致电Dipose(false)

答案 1 :(得分:1)

也许你的班级需要处理非托管资源,因此也会实现终结器?

这样的事情:

   ~MyForm()
    {
       this.Dispose(false);
    }

答案 2 :(得分:1)

如果在最终确定期间调用Dispose(false),那么它本身就很好。如果正在最终确定表单,则包含的控件也将位于终结队列中,并且对它们调用Dispose()至少是多余的。

但是Form最终确定的事实意味着没有对它进行确定性的Dispose(),并且应该调查它本身。除非在应用程序关闭时发生这种情况,正如您所述。然后它是无害的。