我有一个多线程的 Delphi 6 Pro 应用程序,我目前正在大量工作。如果我在主线程(VCL 线程)上下文中运行的任何代码上设置断点,我没有任何问题。但是,如果在我的其他线程之一中的任何代码上触发了断点,则在我从断点继续应用程序之后,对主线程(包括主窗体)上的 VCL 组件的所有重绘都不会再发生。应用程序没有死,因为其他后台代码一直在运行,只是主线程。就好像 Windows 消息调度程序已损坏或处于休眠状态。
注意,在这个应用程序中,我通过主窗体上的 allocateHwnd() 分配了我自己的 WndProc(),因为我需要捕获某些已注册的消息。我从那个 WndProc() 发送我处理的任何自定义消息,如果我的代码没有处理当前消息,我通过调用主窗体的继承 WndProc() 来传递消息。如果我确实处理了当前消息,我只需从 WndProc() 返回并将 Msg.Result 设置为 1,以告诉调度程序该消息已被处理。我不能简单地覆盖 TForm WndProc() 而不是分配我自己的 WndProc() 因为由于某种原因 Delphi VCL 不通过使用 Windows API RegisterWindowMessage() 调用实例化的注册消息。
有没有人在类似的情况下遇到过这种情况,如果有,你做了什么来解决它?
——罗舍尔