我有一个线程调用某种形式的函数来更新这个表单。任务完成后,线程使用结果更新表单,使用Synchronize
并且在程序运行时一切正常。
当线程正在运行并且我关闭我遇到访问冲突的程序时,就会出现问题。它是由已经发布的线程更新表单引起的。在重新排列表单创建的顺序(调用Application->CreateForm
)之后,它工作得很好,因为现在保存线程代码的表单是在更新表单之前创建的。似乎破坏顺序与创建顺序相反。
我还在表单析构函数中添加了一些代码,以确保如果表单在使用线程代码的表单之前被销毁,则线程终止。因此,在表单析构函数中重新排列表单创建顺序和/或代码可以解决问题。
但我有3个问题:
创建的形式被销毁的顺序是什么?它是否与我现在假设的创建顺序相反?
有没有更好的方法来完成上述任务 - 在线程完成处理数据后更新表单 GUI 项。现在我从线程本身使用
Synchronize
但有线程经验的人可能有更好的主意。我的另一个想法是什至删除CreateForm
编译器生成的一堆并手动创建它们,只创建主表单CreateForm
以更好地控制破坏顺序(如 Rob Kennedy 建议的那样 - http://pages.cs.wisc.edu/ 〜肯尼迪/创建形式)。在典型应用程序中动态表单创建/销毁有多昂贵?使用表单隐藏并保存在内存中或关闭时销毁它更好吗?