惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
H
Help Net Security
腾讯CDC
宝玉的分享
宝玉的分享
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
D
Docker
V
V2EX
Last Week in AI
Last Week in AI
G
Google Developers Blog
IT之家
IT之家
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 聂微东

博客园 - williambirkin

.NET平台自带的AOP机制 转自《设计模式--基于c#的工程化实现及扩展》 今天看PolicyInjection遇到的问题 我的第一个ASP.NET Ajax控件 转 事务隔离级别 转 UML 基础: 类图 关于where中子查询的性能问题 请高手指教 模式 转 SQL Server 索引结构及其使用 (三) 转 SQL Server 索引结构及其使用 (二) 转 SQL Server 索引结构及其使用 (一) 泛型的一点思考 摘自《.NET 2.0 模式开发实战》 转 《为Windows应用创建简单的异步调用模式》 转 C#格式化数值结果表(格式化字符串) SQL游标的简单使用 转“理解VC# 2005中的字符串和正规表达式” 2个IP输入控件 Windows Forms中禁用窗体的关闭按钮 回车移动焦点 文本框事件顺序
关于Form.show的问题
williambirkin · 2008-10-06 · via 博客园 - williambirkin

今天跟别人争一个问题。
A窗体show出B窗体后,B窗体再show出C窗体。
这是关闭B窗体,C窗体是否还能显示。
我的想法是,C窗体是B窗体show出来的。
那B窗体应该是C窗体的父窗体,或者说C窗体与B窗体之间存在着依存的关系。
因为我觉得C是B声明并show出来的。
就如同一个类里面声明的变量。
类不存在了变量占用的内存也会释放放掉。

但是回来我测试了一下发现。实际情况不是这样。
即使你关闭了B后C依然正常显示。
只要A关闭,C就不会消失。

呵呵……这个问题很有趣。到底是什么在支持C不消失的能?
我想起很久以前在书店无意看到的一本书上讲过窗体如何显示的原理。
依稀记得“消息循环”几个字。于是上msdn查了一下。
主要是自己对windows的底层不了解才有此误解。

相信以前做vc程序的人对windows消息机制是有所了解。
在.net里面窗体的显示依然是离不开windows消息机制的。
只不过.NET组件已经把这些麻烦的windows编程已经给封装起来了。

在Main()中,利用Application.Run()来将Form窗口显示出来,并进入消息循环。
程序的执行过程中,Application.Run()一直未结束。
当再show出的别的窗体的时候窗体也会被加入到该进程的消息循环中。
只要不人为关闭窗体,窗体将一直被Application.Run()一直维持。

所以窗体的是否关闭释放是跟他在哪里定义没有关系的。
只跟维持他的进程有关。
一旦Application.Run()结束或者进程退出,窗体才会关闭。

在这个程序员变成农民工的时代,只有懂得更多、懂得更深才能提高自己的价值。
努力学习!努力挣钱!