我有一个非常简单的表单,上面有一个TOpenDialog和一个按钮。当我按下按钮时,它会调用对话框上的Execute方法。如果我在调试器中观察,打开对话框的行为会产生大约14个线程,而且当我关闭对话框时,这些线程并不消失。
有人知道这是怎么回事吗?
我有一个非常简单的表单,上面有一个TOpenDialog和一个按钮。当我按下按钮时,它会调用对话框上的Execute方法。如果我在调试器中观察,打开对话框的行为会产生大约14个线程,而且当我关闭对话框时,这些线程并不消失。
有人知道这是怎么回事吗?
你的应用程序也会发生完全相同的事情。 当用户想要使用“打开文件”对话框打开文件时,用户希望能够:
你问剩下的线程怎么办?嗯,一些线程留在那里是为了万一用户决定打开另一个文件:这样可以节省大量时间、流量和输入。用于上次特定进程的自定义身份验证信息?——已存储。那些讨厌的PDF预览图标?——还在。目录中每个电影的长度和比特率?——仍然可用,无需重新解析。
当然,这些线程并不是自己神奇地出现的。查看有多少DLL被映射到该进程中。从其中一些中可以得到相当有趣的功能添加图片。
另一种有趣的观察方式是在每个线程创建时转储调用堆栈。这显示了创建它们的DLL(有时还包括对象)。这是x64 Win7创建所有线程的方法。可以找到创建资源管理器框架线程的活动;一些OLE活动将用于实例化文件过滤器,其中一些可以生成预览图标、覆盖和工具提示;属于搜索子系统的几个线程;shell设备枚举器(因此如果用户插入新设备,它将自动出现在打开对话框中);shell网络监视器(同上)以及其他内容。