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;