如何得到TAnimate重绘没有ProcessMessages

如何得到TAnimate重绘没有ProcessMessages

问题描述:

我有一个简单的VCL表单与TAnimate组件设置为使用aviCopyFiles。该表格包含ShellAnimations单元,因此它可以在Windows 7上运行。如何得到TAnimate重绘没有ProcessMessages

在窗体激活时,它使TAnimate处于活动状态,然后开始使用LZCopy作为更新过程的一部分复制文件。

我发现虽然是TAnimate图像只有当我调用Application.ProcessMessages,即使它应该是在它自己的线程(Timers属性为false)时才会改变。

如何在循环中使其平滑动画以复制更新的文件?

改变主意!

该应用程序的主线程旨在维护用户界面并响应操作系统,例如,为消息队列提供服务并对收到的消息作出适当的响应。

想想那样,你会意识到你不需要一个TAnimate在你的主线程忙的时候工作。你需要的是通过将繁重的工作转移到不同的线程来获得响应主线程。

在你的情况,将您循环,更新的文件复制到不同的线程,你会得到TAnimate 主线程平滑的动态所有的时间。

+0

在进行此复制过程时,主线程没有其他任何操作。用户不能也不应该对应用程序做其他任何事情。窗体显示为模态。为什么要通过线程的所有麻烦,只是为了让一个愚蠢的TAnimate工作,当文档具体说“当定时器是假的,动画是在一个单独的线程中播放。”。这意味着即使主线程忙于循环,动画仍然应该发生。不是这种情况。 – SiBrit 2013-06-05 02:25:48

+0

当然,这对主线程来说是另一回事,并且是为了保持应用程序对主机操作系统和UI的响应能力。也许你不喜欢它,但窗口编程应该完成的方式。 – jachguate 2013-06-10 23:55:24

+0

只要在这里发表评论来说是的,我应该让主线程启动一个新线程来执行复制过程,而主线程只刷新图形并处理OS消息。不幸的是,我被困时间,需要一个简单的解决方案,主线程完成了复制过程,只需要一个视觉线索来取得进展。 – SiBrit 2016-09-19 04:00:15