我创建了一个通用线程类,用于控制在线程的构造函数中注入的进度表,并设置为_progressForm
。在Execute方法,线程初始化形式)显示了使用功能的ShowModal(它,如下图所示:为什么Synchronize被ShowModal锁定?
procedure TProgressThread.Execute;
begin
...
ShowForm;
end;
procedure TProgressThread.ShowForm;
begin
if Assigned(_progressForm) then
begin
Synchronize(
procedure
begin
_progressForm.ShowModal();
end);
end;
end;
我不能理解的是,为什么我的线程在同步锁定?在进度表关闭之前它不会返回。不应该ShowModal只锁定主线程?
如果使用Synchronize,则调用线程将被阻塞直到它返回。 ShowModal在主线程的上下文中运行,所以它将阻塞直到窗体关闭。 –
好像你对一个共同的问题采取了错误的方法。适当的解决方案是在线程内执行* *工作*,而不是显示* progress *。 –
这是一个从主线程调用ShowModal的小bug。想想看。 –