OpenPictureDialog创建了13个线程,但在Delphi中销毁时不会销毁所有线程

时间:2014-11-27 20:46:20

标签: multithreading delphi dialog delphi-xe2 destruction

我注意到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

1 个答案:

答案 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;