OpenPictureDialog создает 13 потоков, но не уничтожает все потоки при уничтожении в Delphi

Я заметил странное поведение с TOpenPictureDialog.

При создании и выполнении TOpenPictureDialog создается 13 потоков, и когда диалоговое окно уничтожается, потоки остаются в соответствии с Windows Activity Monitor, за исключением 1 потока, который исчезает.

Почему это происходит?

Я использую следующий код:

 var opd: TOpenPictureDialog;
begin
  opd := TOpenPictureDialog.Create(self);
  opd.Execute;
  if opd.FileName = '' then exit;
  opd.Free;
begin;

Я использую Delphi XE2 с Windows 8.1

1 ответ

Решение

TOpenPictureDialog не создает никаких собственных потоков. Все они встроены в оболочку ОС, и они кэшируются и используются оболочкой по мере необходимости. Вы не можете их контролировать и не должны беспокоиться о них. Пусть 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;
Другие вопросы по тегам