关于多窗体关闭时的问题?

在form1的实例f1的load 事件中加载form2的实例f2,如果f1退出则f2跟着退出,是否是因为f2是f1的子线程,或者其它原因?
这和vb6区别很大,也请您介绍一下这方面的资料
---------------------------------------------------------------

form1为主窗体代表程序本身,他关闭,肯定是整个都关闭了呀。
---------------------------------------------------------------

主要是这样的,VB.NET实际上生成了这么一段代码,当然我这里是模拟给你们看的,现实中看不到这样的代码:
Module Module1
Sub Main()
Application.Run(New Form1())
End Sub
End Module

这个Application.Run的功能就是显示Form1,开始Form1的消息队列处理并保证当前线程是活动的,一直等到这个Form1的实例注销之后才退出Application.Run过程。于是,当Form1的实例注销之后,Application.Run就退出了,然后呢,就是退出Sub Main,在然后呢,就是退出整个进程。

有人就搞不懂了,我没有动那个Form1的时候,好像也没有执行什么东西呀,这个时候岂不是也是等于没有运行吗?怎么不退出呢?
其实是这样的:并不是什么也没有运行,而是控制的焦点在Application.Run里面。大略写一下Application.Run这个函数:

Sub Run(ByVal c As Control)
If c is Nothing Then Return
c.Visible = True;
Do Until c is Nothing
If HaveNoMessage(c) Then Thread.Sleep()
c.ProcessMessage()
Loop
End Sub

这里的HaveNoMessage是虚构出来的,懂什么意思就好了。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus