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

推荐订阅源

P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
Security Latest
Security Latest
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
H
Help Net Security
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
博客园_首页
S
Securelist
S
Schneier on Security
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog
V
Visual Studio Blog
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
有赞技术团队
有赞技术团队
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
量子位
L
Lohrmann on Cybersecurity
Hugging Face - Blog
Hugging Face - Blog
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
A
Arctic Wolf
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
The Hacker News
The Hacker News
罗磊的独立博客
博客园 - 司徒正美
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 【当耐特】
Microsoft Security Blog
Microsoft Security Blog
K
Kaspersky official blog
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
L
LINUX DO - 热门话题
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
V
Vulnerabilities – Threatpost
AWS News Blog
AWS News Blog
小众软件
小众软件
Project Zero
Project Zero

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

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