2014-11-27 8 views
0

TOpenPictureDialog로 이상한 동작을 감지합니다.OpenPictureDialog는 13 개의 스레드를 생성하지만 Delphi에서 파기시 모든 스레드가 삭제되지 않습니다.

TOpenPictureDialog를 만들고 실행할 때 13 개의 스레드가 생성되고 이고 대화 상자가 삭제되면 스레드는 사라지고 1 개의 스레드를 제외하고 Windows 활동 모니터에 따라 남아 있습니다.

왜 이런 일이 발생합니까?

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

나는 그것의 자신의 스레드를 생성하지 않습니다 윈도우 8.1

답변

6

TOpenPictureDialog 델파이 XE2를 사용하고 있습니다 :

내가 사용하고 코드는 다음과 같다. 그것들은 모두 OS 쉘의 내부에 있으며 필요에 따라 쉘에 의해 캐시되고 재사용됩니다. 당신은 그들에 대한 통제권이 없으며 당신이 그들에 대해 걱정해야만합니다. 쉘이 그 일을하도록하십시오.

동의어가 취소되거나 실패 할 경우 귀하의 코드가 대화 상자를 해제하지 않습니다. 다음을 피하려면 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; 
+0

좋아요. 나는 그것이 이상한 행동이라고 생각한다. 왜냐하면 사용되지 않는다면 왜 그걸 위해 스레드가 있어야 할까? 덕분에 – xaid

+1

쉘은 많은 일을 처리합니다. 따라서 대화 상자를 사용하여 셸을 호출하면 이러한 작업을 시작합니다. –