2

I coding a service application that have two threads. First thread, show a form with label. Second thread, query ADO.

First thread always freezing with Hourglass cursor and no label caption.

Please help.

4

2 回答 2

4

如果您尝试从不是主线程的线程中显示表单,那么您将遇到类似这样的奇怪事情。其中最值得注意的是,如果表单和标签是在非主线程中创建的,那么您就没有消息循环来处理消息。如果表单是在主线程中创建的,但您试图从非主线程中显示它,那么由于 Windows 处理消息和线程的方式,它很可能是死锁。

创建窗口句柄时,它与创建它的线程相关联。这意味着 Windows 将确保发送到该句柄的任何消息都在该线程上处理。

我强烈建议您阅读窗口消息、消息队列和句柄如何在多线程环境中交互和运行。如果没有正确完成,您肯定会遇到一些非常奇怪且可能无法预测的行为。

于 2010-02-04T05:52:13.027 回答
0

我会称你的情况为 Race、Deadlock 或其他类似的错误。正如艾伦所说,如果后台线程对 VCL 控件进行任何直接访问,而不使用 TThread.Synchronize(myMethod) 来调用触及您的 VCL 前台的 myMethod,那么仅此一项就会给您带来麻烦。

请发布更多信息,包括您的代码示例。

于 2010-02-10T17:02:16.330 回答