如何防止在应用程序完成处理之前关闭MDI窗口

时间:2010-12-26 14:59:15

标签: delphi

我有一个MDI应用程序,我有一个MDI孩子在做一些处理(需要10-20秒才能完成)。我发现如果我关闭主应用程序,它会崩溃,因为MDI子项提前关闭(在完成处理之前)。

代码是这样的(将所有代码放在这里太复杂了):

mainForm.OnButtonClick
begin
  start data processing;                         <--- 10 seconds
  create MDI child;                              <--- instant
     create visual controls (runtime)            <== 
        display the processed data in MDI child; <== 1 sec
end;

程序在第3行崩溃。 FastMM说“FastMM已经检测到尝试在释放的对象上调用虚方法”。显然MDI孩子已被释放。

如何防止这种情况?

1 个答案:

答案 0 :(得分:5)

在您的MDI子窗口中,执行

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := not IsWorking;
end;

并做

mainForm.OnButtonClick
begin
  IsWorking := true;
  try
    start data processing;                         <--- 10 seconds
    create MDI child;                              <--- instant
       create visual controls (runtime)            <== 
          display the processed data in MDI child; <== 1 sec
  finally
    IsWorking := false;
  end;
end;