forms - 在 Delphi 中对于模态表单使用 Free 而不是 Release 安全吗?

标签 forms delphi memory-management modal-dialog

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/

相关文章:

delphi - 无法解析的链接错误 E2065 与 XXH32(xxHash 和 lz4)

delphi - 当我运行exe时,在delphi应用程序中安装(并使用)COM组件

c++ - 高效存储最多 2048 个字符的数组?

iphone - iPhone内存管理问题

html - 使文本输入框透明?应该很简单?

ruby-on-rails - 防止修改 ("hacking") 隐藏字段在 rails3 中的形式?

delphi - 在delphi上比较字符串得到错误不兼容的类型

forms - Angular 2 - 大规模申请表的处理

forms - 尝试关闭表单时如何防止填充Microsoft Access错误消息?

objective-c - 类和 block 的生命周期