0

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

4

1 回答 1

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;
于 2014-11-27T21:30:16.237 回答