diff --git a/src/ce_common.pas b/src/ce_common.pas index 8a272d06..3c8a8112 100644 --- a/src/ce_common.pas +++ b/src/ce_common.pas @@ -218,20 +218,21 @@ constructor TCheckedAsyncProcess.Create(aOwner: TComponent); begin inherited; fTimer := TIdleTimer.Create(self); - fTimer.Interval:=50; - fTimer.Enabled:=false; - fTimer.OnTimer:=@checkTerminated; + fTimer.Enabled := false; + fTimer.Interval :=50; + fTimer.AutoEnabled := false; end; procedure TCheckedAsyncProcess.Execute; begin + if OnTerminate <> nil then fTimer.Enabled :=true; + fTimer.OnTimer := @checkTerminated; inherited; - if OnTerminate <> nil then - fTimer.Enabled:=true; end; procedure TCheckedAsyncProcess.checkTerminated(sender: TObject); begin + if Running then exit; if OnTerminate = nil then exit; fTimer.Enabled:=false; OnTerminate(Self); diff --git a/src/ce_staticexplorer.pas b/src/ce_staticexplorer.pas index b40001dc..679360db 100644 --- a/src/ce_staticexplorer.pas +++ b/src/ce_staticexplorer.pas @@ -23,7 +23,7 @@ type procedure TreeFilterEdit1AfterFilter(Sender: TObject); procedure TreeKeyPress(Sender: TObject; var Key: char); private - fDmdProc: TAsyncProcess; + fDmdProc: TCheckedAsyncProcess; fLogMessager: TCELogMessageSubject; fActRefresh: TAction; fActRefreshOnChange: TAction; @@ -353,7 +353,7 @@ begin // standard process options killProcess(fDmdProc); - fDmdProc := TAsyncProcess.Create(nil); + fDmdProc := TCheckedAsyncProcess.Create(nil); fDmdProc.ShowWindow := swoHIDE; fDmdProc.Options := []; fDmdProc.Executable := 'dmd';