在单独的线程中加载数据期间,表单会冻结

时间:2011-03-30 03:52:30

标签: multithreading http thread-safety c++builder indy

我使用TIdHTTP组件从一个单独的线程中的银行加载xml数据,但我的表单在此期间被冻结......

可能是什么问题?

我有一个主窗体和线程类,在线程类中我有一个名为loadData的方法,并且在线程上:: Execute i Synchronize(loadData);

当点击按钮时,我创建了类似testThread的线程类实例* t = new testThread(false);

这就是

当我点击按钮时,主窗体会冻结? 甚至单独的线程没有帮助????

请帮助!!!

1 个答案:

答案 0 :(得分:0)

Synchronize()正在主线程的上下文中运行loadData()方法,而不是在工作线程的上下文中。这就是你的主线程在loadData()繁忙时阻塞的原因。您滥用Synchronize(),使您的线程无用。您需要在Synchronize()之外完成大部分线程工作,然后仅在需要时使用Synchronize()在主线程中执行小更新,例如显示状态(即使如此,Synchronize()并不总是最好的选择。)