C# Form.Close 的释放问题

今天使用From窗口Close后,发现From的资源还存在,并没有释放资源,只有在程序关闭的时候才去释放。

Form1:button按钮

private void button1_Click(object sender, EventArgs e)
{
  Form2 frm = new Form2();
  frm.ShowDialog();
}

Form2:

public Form2()
{
  InitializeComponent();
  Trace.WriteLine("From2 InitializeComponent");
}

~Form2()
{
  Trace.WriteLine("From2 dispose");
}

操作:From1点击按钮打开From2,然后关闭Form2,再打开Form2,关闭From2,最后关闭程序。看到的打印是

说明Close 并没有释放资源,只有在程序退出的时候才自动释放

ps:在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。

时间: 2024-08-11 07:44:48

C# Form.Close 的释放问题的相关文章

FORM 的创建

25 26 27 //第一种方式 procedure TForm1.btn1Click(Sender: TObject); begin With TForm2.Create(Application) do Try ShowModal; finally free; end; end; //第二种方式 procedure TForm1.btn2Click(Sender: TObject); begin if not assigned(Form2) then begin Form2:=TForm2.C

FMX对象释放

今天盒子中有朋友遇到对象释放的问题,原文在这里,他的实现大意是建立一个TmyLayout = class(TLayout),然后在这个类中画线,Form对象调用实例化这个类来画线,然后释放掉这个对象,问题就出在释放.我们看一下他建立这个对象与释放的代码:procedure TForm1.Button1Click(Sender: TObject);var i: Integer;begin     ly := TmyLayout.Create(Self);     ly.Parent := Form

QTP学习笔记1

QTP中获取当前路径 实属转帖,方便以后查找~ QTP9.2版本,以下内容适合QTP和vbs. 路径一:QTP的测试当前路径 environment("TestDir") 使用environment("TestDir")能获取当前测试的绝对路径,不包括最后的"\" 方法: Path = environment("TestDir") 路径二:QTP安装目录下bin目录的路径 WshShell.CurrentDirectory (

C# WinForm实现粘贴图片到PictureBox及复制PictureBox中的图片

本程序功能需要 PastePicture.dll 文件的支持,下载地址为:http://download.csdn.net/detail/jsjyyjs07/8907405 1.程序设计界面如下图: 操作方式为:按住快捷键Ctrl+V,鼠标点击一个PictureBox 完成图片的粘贴 按住快捷键Ctrl+C,鼠标点击一个PictureBox完成图片的复制 2.主要功能性代码如下: using PastePicture; ClipboardImage cImg = new ClipboardIma

VBScript/QTP 的常用COM对象列表

众所周知,我们经常在脚本中创建一些对象来实现某些特定的功能.尤其是当我们使用QTP的描述性编程时,需要创建这些对象. 下边是我们经常在QTP或VBScript中用到的对象列表: Set objEmail = CreateObject("CDO.Message" ) Set objIE = CreateObject("InternetExplorer.Application" ) Set objInet = CreateObject("InetCtls.In

uniGUI动态建立Form及释放 (2015-10-01 14:51:12)

uniGUI动态建立Form及释放 (2015-10-01 14:51:12) 转载▼   分类: uniGUI 用uniGUI开发的项目中,难免要遇到动态建立一个Form,再释放掉,与传统Delphi项目不一样,这是从forum转贴过来的,要这样写: //建立方法if Frm = nil then  Frm := TUniForm1.Create(UniApplication); //调用及释放方法Frm.ShowModal(       Procedure(Sender: TComponen

[转]Delphi Form的释放和隐藏:free,hide,close

form.Free - 释放Form占用的所有资源.Free后,Form指针不能再使用,除非对Form重新赋值. form.Hide - 隐藏Form.可以调用form.Show再一次显示. form.close - 关闭Form,实际的结果取决于OnCloseQuery和OnClose,如果OnCloseQuery的CanClose为False,不执行任何操作,如果为True,进一步考察OnClose的Action的值: caNone: 不执行任何操作 caHide: 隐藏窗口,同form.H

【Reproduce】 C#中实现拖动无边框Form窗体

首先建一个Windows应用程序 将Form1的 FormBorderStyle属性设置为Noe 主要是在Form1窗体触发三个事件:Form4_MouseDown,Form4_MouseMove,Form4_MouseUp 代码如下:       public partial class Form1 : Form { Point mouseOff; //鼠标移动位置变量 bool leftFlag; //标签是否为左键 public Form1() { InitializeComponent(

ORACLE 如何查询被锁定表及如何解锁释放session

ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 --锁表查询SQLSELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid; 找到被锁