Delphi 在线帮助说应该使用 Release 来从内存中删除表单。然而,在许多模态形式的例子中,我看到了这种结构:
MyForm := TMyForm.Create(nil);
try
MyForm.ShowModal;
finally
MyForm.Free;
end;
Free 是销毁模态表单的安全方法吗?正如我在 ShowModal 的源代码中看到的,Application.HandleMessage 将被调用,直到 ModalResult 不为 0。这就是 Free 不能干扰待处理窗口消息的原因吗?
最佳答案
是的,在 ShowModal
调用后使用 Free
是安全的。
需要使用Release
的情况是当您处于事件处理程序中间时(例如,OnClick
),在事件之后进行进一步处理将必须访问该表格。在这种情况下,调用 Release
而是发布一条 CM_RELEASE
消息,该消息不会释放事件,直到事件处理程序完成并且控制权返回到消息泵 (ProcessMessages
/Application.Run
)。 ShowModal
在事件处理程序完成并且控制使其备份堆栈之前不会返回,因此之后调用 Free
实际上与 CM_RELEASE
消息将被处理,否则。
关于forms - 在 Delphi 中对于模态表单使用 Free 而不是 Release 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916843/