代码之家  ›  专栏  ›  技术社区  ›  Ken

.NET WinForms应用程序不释放组件?

  •  0
  • Ken  · 技术社区  · 16 年前

    我正在使用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 回复  |  直到 16 年前
        1
  •  4
  •   STW    16 年前

    这个 disposing 如果 Dispose(bool) 正在从终结器调用。通常这种情况发生在 Dispose() 还没打电话。


    这个 处置(BOOL) 方法实际上不是IDisposable的一部分;两者都使用它 IDisposable.Dispose() 并且通过 Object.Finalize() .惯例是这样的 IDisposable.Dispose()。 将呼叫 Dispose(true) 对象。完成() 将呼叫 Dipose(false) .

        2
  •  1
  •   Mez    16 年前

    也许您的类需要释放非托管资源,从而实现终结器?

    像这样:

       ~MyForm()
        {
           this.Dispose(false);
        }
    
        3
  •  1
  •   Henk Holterman    16 年前

    如果 Dispose(false) 在完成过程中调用,但本身没有问题。如果表单正在定稿,则所包含的控件也将位于定稿队列中,并且对它们调用Dispose()至少是多余的。

    但是,一个表单正在定稿这一事实意味着没有对其调用确定性Dispose(),应该对其本身进行调查。除非在应用程序关闭时发生这种情况,如您所说。那么它是无害的。