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

xdd1125 2002-11-08 01:41:23
在form1的实例f1的load 事件中加载form2的实例f2,如果f1退出则f2跟着退出,是否是因为f2是f1的子线程,或者其它原因?
这和vb6区别很大,也请您介绍一下这方面的资料
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yufenfeila 2002-11-09
  • 打赏
  • 举报
回复
学习中……
xdd1125 2002-11-09
  • 打赏
  • 举报
回复
多谢
sumtec 2002-11-08
  • 打赏
  • 举报
回复
主要是这样的,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是虚构出来的,懂什么意思就好了。
xdd1125 2002-11-08
  • 打赏
  • 举报
回复
我想是不是f1是主线程,而从f1中产生的线程则是它的子线程,主线程退,则子线程也被迫退出(我对这样的线程机制不太了解,请大家多多协助)
eliphe 2002-11-08
  • 打赏
  • 举报
回复
form1为主窗体代表程序本身,他关闭,肯定是整个都关闭了呀。
xdd1125 2002-11-08
  • 打赏
  • 举报
回复
up

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧