一 窗口事件
当窗口创建时,以下事件依次发生:
Load->Activated->->Shown;
当窗口关闭时,以下事件依次发生:
FormClosing->FormClosed->Deactivate;
其中,Closed/Closing已经过时(obsolete);
二 消息循环
消息循环 Message Loop;
应用程序Application;
启动消息循环:Applicaton.Run(form);
消息循环是一个循环,所以Run()方法会一直运行。不会返回,消息循环终止。
Application.ExitThread()退出当前消息循环;
Application.Exit(); 退出所有消息循环;
消息循环上的所有窗体会被关闭;
Application.Run()返回。
主窗口,MainForm
Application.Run(form)
当运行主窗口时,自动添加一个Closed事件处理,在窗口关闭时,调用Application.ExitThread()来退出消息循环。
三 应用的退出
如何退出应用程序?
比较以下的方法:
Form.Hide()隐藏主窗口;
Form.Close()关闭主窗口;
Application.Exit()/ExitThread()退出消息循环;
System.Environment.Exit()强行退出整个进程;
Form.Hide()隐藏主窗口;
显然,主窗口隐藏时,应用并没有退出;
提示:打开任务管理器,切换到详细信息,根据名字找到相应的进程。点"线程任务"。
1 Form.Close()
Form.Close()关闭主窗口
① 当主窗口关闭时;
② Form.Closed事件触发;
③ Application。ExitThread(),退出当前消息循环;
④ 当前的界面线程随之退出;
界面线程退出,进程就结束?No,No,NO!
2 Application.ExitThread()
显示调用:Application.ExitThread()
① 退出当前消息循环;
② 当前的界面线程随之退出;
同样地,界面线程退出时,进程不一定结束。只有所有的前台线程都结束时,进程才会结束。
System.Environment.Exit(0)
强行退出进程,不管当前有什么线程,直接终止。可能导致不完整的状态和数据,不推荐调用。
四 窗口切换
1 在Main()中,启动登录界面
Application.Run(new LoginForm())
2 点击登录时,关闭登录界面,进入业务界面
问题在于,当LoginForm关闭时,界面线程也会退出。