当前位置:编程学习 > C#/ASP.NET >>

在关闭窗体时调用Dispose方法的问题

我在一个弹出的模式窗口的OnClosing事件中调用的Dispose方法,因为这个子窗体中使用的资源比较多,还有线程调用之类的,想手动释放,我试了一下,如果不手动释放,不断的打开、关闭子窗体,程序的进程占用的内存只增不减,但是这个子窗体关闭回到母窗体后,母窗体总有一次闪烁,估计是母窗体重画了,不知道有什么方法解决,即能释放子窗口的资源,又能使母窗体不闪烁。
--------------------编程问答-------------------- 当然会闪一下了啊 --------------------编程问答-------------------- 最好不在OnClosing事件里调用Dispose,而是像如下的调用:

Form f=new Form();
f.ShowDialog(owner);
f.Dispose();或f.Close(),Close也会调用Dispose方法的.

主窗会原来可能被子窗体覆盖,当不被覆盖的时候它自己会发生Paint事件用来重新的进行绘制.
如果绘制很"费劲",那么这个闪就明显了. --------------------编程问答-------------------- 窗体关了会自动调用,用不着多此一举吧 --------------------编程问答-------------------- to :hbxtlhx(平民百姓-自已动手,丰衣足食) 
打开子窗体就覆盖主窗体,回到主窗体后都需要重画,但为什么在子窗体只调用close不调用dispose,就不会闪呢 --------------------编程问答-------------------- up --------------------编程问答-------------------- 顶

Form f=new Form();
f.ShowDialog(owner);
f.Dispose();或f.Close(),Close也会调用Dispose方法的. --------------------编程问答-------------------- 但为什么在子窗体只调用close不调用dispose,就不会闪呢
-----------
会这样吗?

你在什么地方调用的呢. --------------------编程问答-------------------- to :hbxtlhx(平民百姓-自已动手,丰衣足食) 
在一个按钮响应里面:
public partial class Form2 : BaseForm
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button16_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
这个窗体是继承自BaseForm的,在BaseForm里重写了OnClosing:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            base.OnClosing(e);
            Dispose();
        } --------------------编程问答-------------------- 还有,就是页面中的控件刷新是正常的,但是现在是整个窗体包括FORM都刷 --------------------编程问答-------------------- 觉得你没有必要要这个重写,且逻辑也不太通,怎么在正关闭的时候调用Dispose呢,在OnClosed事件调用也不在OnClosing中调用啊:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            base.OnClosing(e);
            Dispose();
        }

而且这个Dispose最好是在使用窗体的时候调用,比如:

Form2 f=new Form2 ()
f.ShowDialog(this);
f.Dispose();//这里调用,而不是在Form2 里调用,那不是"易做图"了吗?
--------------------编程问答-------------------- 用showdialog打开的窗体
close方法是不会直接调用dispose的吧??
我说的是在。Net下的情况
引用 2 楼  的回复:
最好不在OnClosing事件里调用Dispose,而是像如下的调用:

Form   f=new   Form();
f.ShowDialog(owner);
f.Dispose();或f.Close(),Close也会调用Dispose方法的.

主窗会原来可能被子窗体覆盖,当不被覆盖的时候它自己会发生Paint事件用来重新的进行绘制.
如果绘制很"费劲",那么这个闪就明显了.……
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,