我創建了一個通用線程類,用於控制在線程的構造函數中注入的進度表,並設置爲_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。想想看。 –