刚看了某同学的一个关于从任务管理器关闭程序时执行程序FormClose响应代码的问题。其中提到在任务管理器的“应用程序”栏关闭时,会执行Close响应代码;而在“进程”栏关闭时,不会执行Close响应代码。
因此,可以想像:
在“进程”栏关闭时,操作系统采取的操作是直接终止进程。
在“应用程序”栏关闭时,操作系统采取的操作是向窗口发送一个Close消息(即相当于点击窗体的关闭按钮)。
任务管理器中显示的信息可以佐证这一点:“应用程序”栏中显示的窗体标题,同一个应用程序的不同窗体在“应用程序”栏中被当作不同的任务。
因此,可以想象,“应用程序”栏是针对窗口的,“进程”栏则是针对进程的。
不过,我又测试了一下,发现似乎和想象中的不完全一致,测试代码如下:
while (true)
{
Application.Run(new FrmEllipse());
System.Threading.Thread.Sleep(1000);
}
根据我的猜想,此程序在执行时针对不同的关闭方式的响应应为:
1、通过窗体的关闭按钮关闭时,当前窗口关闭,打开新窗口。
2、通过任务管理器“应用程序栏”关闭时,与1相同。
3、通过“进程”栏关闭时,当前窗口关闭,且不再打开新窗口。
真实的执行结果显示,1、3如预期,2有点诡异,其结果为:
当前窗口关闭,打开一个新窗口,稍后(约1~2秒)程序退出。
哪位大侠能解释下么?