none
有关多个窗口间的操作 RRS feed

  • 问题

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

    当子窗口对象B调用close()时自动调用上述方法(另外components为什么也为空?),子窗口消失;在从父窗口中调用子窗口对象,并判断B是否为空,为什么这个地方B不为空,只是IsDisposed()方法返回true;

    有人说是调用close()方法窗口对象是被释放了,但是这个跟调试又不对了;又有人说父窗口exit()时,子窗口才被释放,那close()又有何意义。完全不理解,求解释,详细的。最好连动太内存分配也讲下?谢谢

    2011年8月15日 12:52

答案

  • 你好,

    我想到的解释是这样的。

    当窗体被close的时候,窗体中所有的应用到的对象都需要被释放,因此需要释放窗体中所有的组件经控件。

    另外,Dispose方法是用于释放native的资源。当在父窗口中调用子窗口,发现其不为null,我想是因为,GC的时间是不可预测,GC0代对象回收,如果不强制执行,会在0代对象堆满的时候发生一次,可能你释放了子窗口资源,但是GC还没有予以回收,建议你可以在调用前,强制执行一次GC,以测试原因。


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年8月17日 9:02