我注意到TOpenPictureDialog的一个奇怪的行为。
创建并执行TOpenPictureDialog时,会创建13个线程, 当对话框被销毁时,线程依旧存在 Windows活动监视器,除1个线程外,它将消失。
为什么会这样?
我使用的代码如下:
var opd: TOpenPictureDialog;
begin
opd := TOpenPictureDialog.Create(self);
opd.Execute;
if opd.FileName = '' then exit;
opd.Free;
begin;
我在Windows 8.1中使用Delphi XE2
答案 0 :(得分:6)
TOpenPictureDialog
不创建自己的任何线程。它们都是OS Shell的内部部件,它们会根据需要由Shell缓存和重用。你无法控制它们,也不应该担心它们。让壳牌公司做好自己的工作。
顺便说一下,如果取消或失败,您的代码不会释放对话框。使用try/finally
块来避免:
var
opd: TOpenPictureDialog;
begin
opd := TOpenPictureDialog.Create(nil);
try
if not opd.Execute then Exit;
// use opd.FileName as needed...
finally
opd.Free;
end;
end;