如何在GUI更新期间保持Delphi App响应?

jpf*_*ius 5 delphi user-interface

这个问题是关于在长时间运行的任务期间保持GUI响应(在大多数情况下几秒钟).

我广泛使用线程和任务模式在后台线程中执行昂贵的任务.但是GUI更新需要一些时间呢?例如,填充大字符串网格或树视图?一个线程在这里没有帮助,因为无论如何一切都需要与主线程同步.

我知道这些问题Application.ProcessMessages,但目前它似乎是将调用ProcessMessages放入GUI更新方法的唯一解决方案.

有更好的想法吗?

The*_*Fox 5

填写网格,列表,数据集等时,请调用BeginUpdate/EndUpdate DisableControls/EnableControls.这将节省您的时间.我还有一个线程做了一些计算,但是GUI很慢,直到我在被修改的数据集上调用DisableControls并且因为控件在另一个标签页上而不可见.

此外,在更新控件时,请准备好您需要的所有数据,这样您就可以填充列表,而无需进行可以减慢速度的计算.


utk*_*tas 5

IMO如果GUI更新是瓶颈(即使使用了BeginTheUpdate/EndUpdate作为@The_Fox建议),那么是时候重新考虑使用的GUI控件了.标准网格,树视图,列表框不仅仅是用于处理大量项目.为此目的,有许多高性能的第三方控件都是免费的和商业的.

对于入门者,如果瓶颈在网格,树视图或列表框上下文中,请查看VirtualTreeview.

  • 将列表视图或树视图更改为[VirtualTreeView] [1].在Delphi 2009/2010中,调试消息"列表视图"实际上是一个虚拟树视图,因为其他控件的项目不断插入,更新速度太慢,无法满足用户期望.看来你有类似的问题.你想要的是一个更快的GUI控件.[1]:http://www.delphi-gems.com/index.php?option = com_content&task = view&id = 12&Itemid = 38 (2认同)