繁体   English   中英

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

[英].NET WinForms application not releasing components?

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

在删除应用程序期间,我发现了一些我认为很奇怪的东西。 设计器中生成的dispose方法:

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

我看到一种情况,当components确实包含某些项目时,它会传递disposing = false参数。 这使我相信,由于components.Dispose();未能正确处置/释放这些资源components.Dispose(); 没有接到电话。 这是曾经想要的行为吗?

谢谢。

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


Dispose(bool)方法实际上不是IDisposable的一部分; IDisposable.Dispose()Object.Finalize()都使用它。 约定是IDisposable.Dispose()将调用Dispose(true)Object.Finalize()将调用Dipose(false)

也许您的班级需要处置非托管资源,并因此实现终结器?

像这样:

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

如果在完成过程中调用Dispose(false)本身很好。 如果要完成Form,则包含的控件也将在完成队列中,并且在它们上调用Dispose()至少是多余的。

但是,事实是Form即将完成,这意味着没有在其上调用任何确定性的Dispose(),因此应单独对其进行研究。 如您声明的那样,除非在关闭应用程序时发生这种情况。 那就无害了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM