线程停止时关闭窗口

evi*_*one 2 delphi multithreading delphi-2010

我有关于线程和控件的问题.我做了一个同步模态对话框.有三个进度条和几个标题.如果第一次打开应用程序,它将打开同步对话框并执行更新.在对话框Show()方法中,我创建了三个不同的线程.每个线程控制数据下载,xml解析和数据库插入.然后显示进度条的进度.所有描述,工作正常.

现在问题 - 我想在下载,解析并插入数据库时​​自动关闭此对话框.我试图检查progressbar.position是否等于progressbar.max并且我尝试检查线程是否被终止.如果我使用进度条方式,对话框太早关闭并且一个进度条没有完全结束.如果我使用线程检查方式,那么progressbars会在进程中间停止,这就是全部.

也许你已经完成并告诉Delphi n00b,最好的方法是怎样做.

提前致谢...

jac*_*ate 5

对于这个简单的事情,你可以使用线程OnTerminate事件(它在主线程的上下文中运行)只是为了减少在线程创建时初始化为3的"线程计数"变量.

当线程数达到0时,您可以安全地关闭表单.

begin
  //..thread creation, stuff
  FThreadCount := 3;
  DownloadThread.OnTerminate := DecThreadCount;
  ParseThread.OnTerminate := DecThreadCount;
  InsertThread.OnTerminate := DecThreadCount;
  //resume threads and other stuff
end;

procedure TForm1.DecThreadCount(Sender: TObject);
begin
  Dec(FThreadCount);
  if FThreadCount = 0 then
    Close;
end;
Run Code Online (Sandbox Code Playgroud)