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

推荐订阅源

V
V2EX
爱范儿
爱范儿
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
B
Blog RSS Feed
博客园 - 聂微东
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
WordPress大学
WordPress大学
Scott Helme
Scott Helme
AI
AI
S
Security Affairs
T
Threat Research - Cisco Blogs
M
MIT News - Artificial intelligence
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
AWS News Blog
AWS News Blog
T
Threatpost
Cyberwarzone
Cyberwarzone
www.infosecurity-magazine.com
www.infosecurity-magazine.com
U
Unit 42
V
Vulnerabilities – Threatpost
J
Java Code Geeks
博客园 - Franky
月光博客
月光博客
Blog — PlanetScale
Blog — PlanetScale
NISL@THU
NISL@THU
D
Docker
小众软件
小众软件
N
News and Events Feed by Topic
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
A
Arctic Wolf
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
Forbes - Security
Forbes - Security
量子位
PCI Perspectives
PCI Perspectives
美团技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
I
InfoQ
Security Archives - TechRepublic
Security Archives - TechRepublic
有赞技术团队
有赞技术团队
腾讯CDC
P
Proofpoint News Feed
S
Security @ Cisco Blogs
G
Google Developers Blog
C
Cisco Blogs

博客园 - 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()结束或者进程退出,窗体才会关闭。

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