我在我的应用程序上创建了一个同步线程,我想知道有没有办法让线程保持打开状态,直到完成它的同步过程,如果我关闭申请表?
答案 0 :(得分:6)
在WaitFor
行之后调用DPR文件中的线程Application.Run
方法。如果线程已经完成运行,则WaitFor
将立即返回。否则,它将暂停主线程,直到另一个线程终止。 (您必须确保该变量仍引用有效的TThread
实例,因此请勿设置其FreeOnTerminate
属性。)
除了允许线程继续运行的简单问题之外,您还可以考虑其他一些事项:
答案 1 :(得分:1)
在Rob的优秀答案的评论中,提出了在等待时显示UI的问题。如果您需要在等待时显示UI,则需要更高级的等待TThread.WaitFor
。这就是我所依赖的MsgWaitForMultipleObjects
。
procedure WaitUntilSignaled(Handle: THandle; ProcessMessages: Boolean);
begin
if ProcessMessages then begin
Application.ProcessMessages;//in case there are any messages are already waiting in the queue
while MsgWaitForMultipleObjects(1, Handle, False, INFINITE, QS_ALLEVENTS)=WAIT_OBJECT_0+1 do begin
Application.ProcessMessages;
end;
end else begin
WaitForSingleObject(Handle, INFINITE);
end;
end;
....
Form.Show;
WaitUntilSignaled(Thread.Handle, True);
Form.Close;