【发布时间】:2015-11-08 22:30:42
【问题描述】:
我希望在打开大型查询时使用新的西雅图 TActivityIndicator,但这会阻塞主 vcl 线程并因此停止 TActivityIndicator。
TActivityIndicator 肯定表示活动,应该在不同的线程中工作。
不必在任何地方都放入 Application.Processmessages,还有其他方法吗?
【问题讨论】:
-
指标应该在主线程中工作,而您的任务应该在工作线程中完成。
-
所以我重新设计了我的应用程序以适应活动指示器?我宁愿希望反过来。
-
那是不现实的。当您将长时间运行的任务放在 UI 线程上时,您犯了错误。再多的魔法也无法掩盖这个错误。你必须修复它。将长时间运行的任务交给工作人员。哦,永远不要调用 ProcessMessages。
-
我们的期望并不低。这就是 VCL 的设计方式。 VCL 在这里不是异常值。鉴于 Win32 的设计,VCL 的线程规则是良好设计的标志。最初的设计师做得很好。
-
我并没有说你的应用程序是“垃圾”。你似乎有些激动。不可避免的事实是,您不应该在 UI 线程上执行长时间运行的任务。这是一个众所周知且长期存在的规则。这几乎是线程存在的理由。
标签: multithreading delphi delphi-10-seattle