我有一个中等复杂的程序,它使用了多个第三方组件,我在Borland / Codegear / Embarcadero IDE的许多迭代中维护了大约20年。最新的迭代(使用Delphi 2010)存在一个问题,该问题仅出现在某些用户的计算机上,并在关闭时停止响应。如果用户右键单击任务栏图标并再次选择“关闭”,程序将关闭。
我试图在我的位置重现问题而没有成功。我已经实现了各种日志记录方案,并且可以看到执行在FormCloseQuery过程之后但在FormDestroy事件之前停止。
当用户启动关闭时,有多个表单和多个线程在执行。
我创建了一个小程序,用于注册Windows消息并显示相关应用程序的信息。这就是我所看到的:
Debug Message ID = 49681
7/28/2015 2:34:26 PM - MyApp initialized
7/28/2015 2:34:42 PM - Port opened COM3
7/28/2015 2:34:44 PM - Port opened COM5
7/28/2015 3:14:51 PM - Port closed COM3
7/28/2015 3:14:51 PM - Port closed COM5
7/28/2015 3:14:51 PM - MyApp closing (last line in MainForm.OnCloseQuery)
7/28/2015 3:14:51 PM - Configuration window destroy **stalls here**
7/28/2015 3:15:25 PM - Run Table destroy
7/28/2015 3:15:25 PM - Alert window destroy
7/28/2015 3:15:25 PM - Sample Table destroy
7/28/2015 3:15:25 PM - Debug window destroy
7/28/2015 3:15:25 PM - Main window destroy
7/28/2015 3:15:26 PM - Main window finalize
“配置”窗口创建并拥有多个子表单。在配置窗口OnDestroy代码中,这些代码被释放,但是有一个对Application.ProcessMessages的调用。 (回到2000年初,有一个问题,有时表格会在被释放时发送一条消息)这可能是问题吗?
答案 0 :(得分:0)
There was a call to Application.ProcessMessages in the FormDestroy event handler of my configuration window. After I took that out the customer has not seen the problem.