您现在的位置是:首页 > 技术交流技术交流
C# 关闭form的四种方法
2020-02-27【技术交流】1564 人已围观
简介1. close():指仅关闭当前窗体,如果不是主窗体(包含主线程的窗体,并非MDI窗体)的话,是无法退出整个程序的。如果有托管线程也无法退出。 ...
1. close():指仅关闭当前窗体,如果不是主窗体(包含主线程的窗体,并非MDI窗体)的话,是无法退出整个程序的。如果有托管线程也无法退出。
此方法会调用 dispose() 方法,所以它会自动的帮我们释放内存,除了以下两种情况:(1)该窗体是多文档应用程序(MDI)的一部分并且此窗体不可见;(2)此窗体是“模态”窗体。
close() 方法执行的时候会触发两个事件:Form_Closing 和 Form_Closeed 事件,Form_Closing 是在窗体关闭时执行,Form_Closed 是在窗体关闭之后执行,所以如果想取消关闭窗体,可以在 Form_Closing 事件里取消。
2. Application.Exit(): 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出。
3. Application.ExitThread(): 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题。
4. System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 参数0:代表程序正常退出;参数1:代表程序非正常退出。
close() 和 dispose() 的区别
close():这个方法会自动调用 dispose()方法。
dispose():这个方法的作用是释放组件使用的所有资源,.NET 提供的垃圾自动回收机制,可以帮我们自动回收垃圾对象,可是垃圾回收器只能回收“托管资源”,而不能回收“非托管资源”,而且垃圾回收器也并不是立即回收,而是每隔一段时间才会回收一次,每次回收的时间我们都不知道。
所以 dispose() 方法是为了弥补这种机制所产生的方法,调用 dispose(true) 方法可以释放“托管”和“非托管”资源,而且它可以不必等待垃圾回收器来自动释放,调用此方法可以显示释放资源。
Form.show() 和 Form.ShowDialog() 的区别
From.Show():窗体显示出来的是非模态窗体
From.ShowDialog():窗体显示出来的是模态窗体,而且点击窗体右上角的关闭按钮时,它不是调用 close() 方法,而是调用 hide() 方法。所以它并不是真正的关闭,再调用此方法窗体还会出现。而非模态窗体,点击关闭的时候,会调用 close() 方法,再次调用 Show() 方法,就会报错,因为窗体对象已被释放。
托管资源 和 非托管资源
托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象
非托管资源:不受CLR管理的对象,windows内核对象,如文件、数据库连接、套接字、COM对象等
关注宁波网站建设博客,更多精彩分享,敬请期待!
Tags:
很赞哦! ()
相关文章
随机图文
-
表单文本框小技巧:禁止自动完成
文本输入框的自动提示功能在浏览器中模式是打开的。有时候我们并不需要自动提示功能,例如需要用户自己再次输入而非自动完成。在IE中可以使用工具-... -
二维码常见数据格式标准
随着智能设备的普及,二维码(2D barcode or QR code=Quick reference code)的使用越来越广泛,用智能... -
linux显示当前版本
有时接手维护一下linux服务器,我们第一步需要确定当前版本,以下命令可以尝试 先以root登陆1、# uname -a (Linux查看... -
hinkPHP框架模糊查询’DB_LIKE_FIELDS’设置无效的bug
手册表达式查询like项提示:如果配置了DB_LIKE_FIELDS参数的话,某些字段也会自动进行模糊查询。设置以后无效,原因如下: Dr...