在关闭窗体时调用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下的情况
补充:.NET技术 , C#