Ana*_*oge 1 forms delphi free exception logout
我正在使用Delphi(7-2010)并试图找到一种处理异常的好方法,同时释放应用程序的形式.应用程序有几种由Application对象拥有的表单.当用户注销时,我需要释放所有现有表单,以便不维护用户状态,然后显示登录的下一个用户的登录对话框.
有时,尝试释放其中一个表单时会发生异常.这会将表单保留在内存中,但是处于未知/不可用状态,因此我不能将表单重新用于下一个用户,而且我也无法从内存中删除它.因为表单是由应用程序拥有的,所以我无法直接为下一个用户创建表单的新版本,因为它会导致VCL中的"A组件名为MyForm已经存在"错误,我有点厌恶无论如何要在内存中使用旧的表单实例.
我想看看其他人在这种情况下会做些什么.以下是一些想法:
实际上没有办法处理析构函数中引发的异常.并且我不认为期望它们永远不会被提升是"不现实的",因为析构函数不应该做任何可能导致异常的事情.如果你正在做任何事情,除了释放内存或其他清理,(释放句柄,关闭连接等),你几乎肯定做错了什么.
导致例外的是什么,BTW?您是否能够始终如一地重现错误?您最好的做法是修复错误.它们不应该太多.
大多数时候,销毁表单时会发生错误,因为仍有一些事件处理程序正在执行并引用已销毁的对象。
这就是为什么TForm.Release创建它来代替在这种情况下使用TForm.Free。
来自帮助:
使用 Release 来销毁表单并释放其关联的内存。在窗体的所有事件处理程序和窗体上组件的事件处理程序执行完毕之前,Release 不会销毁窗体。释放还保证在释放表单之前处理表单事件队列中的所有消息。窗体或其子窗体的任何事件处理程序都应使用 Release 而不是 Free (Delphi) 或删除 (C++)。如果不这样做可能会导致内存访问错误。
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |