查看代码和日志后发现,工作流程的驱动是通过PostThreadMessage消息到主线程来进行的,当程序卡在某一位置时,消息是发送出去了,但没有到达消息处理函数中。所谓消息丢失了。
PostThreadMessage确实可能会使消息丢失,函数说明中明确提到了。所以更换为PostMessage,发消息到TApplication的Handle。但是消息丢失的情况更加频繁了。
看来利用TApplication来处理消息也不是好办法;只有把消息发送到主窗体,在主窗体中处理消息应该更加可靠。
虽然Delphi的帮助里对 TApplication的Handle说明是"Provides access to the window handle of the main form (window) of the application.",但是我们应该知道,这里的main form和Delphi程序里我们的主窗体是不一样的,尽管我们在Delphi的Project属性中设置时也是称作Main form。我们的设置的主窗体,在TApplication中是MainForm,我们的主窗体的Handle也只能用MainForm.Handle来获得。
最终解决,PostMessage消息到MainForm.Handle,然后在MainForm中进行处理,终于和谐了。
没有评论:
发表评论