网上看到有人抱怨说在 FireMonkey 框架下做了动画,然后当使用 Indy 做网络访问的时候,因为 Indy 的阻塞,导致动画停止了。他已经把 Indy 访问网络的代码放进线程了,还是让动画停止。抱怨在 FireMonkey 框架下 TThread 有问题不好用。
我就在 Delphi 10.3.3 底下写了个测试程序,测试了一下。发现一切正常。
测试程序里面有三种动画:
1. Delphi 提供的 TFloatAnimation 来让一个 TArc 旋转起来。这个无需写代码,设置几个属性就可以了;
2. 我自己定义了一个 TThread 的子类,在里面跑循环,去驱动一个 TArc 旋转。中间用 Sleep 去阻塞线程,看看线程因为 Sleep 停止后,第一个动画是否被阻塞停止;
3. 另外一个线程的写法,使用 TTask.Run 里面写匿名函数,在该函数里面循环去驱动一个 TArc 旋转。
--------------------
测试结果,符合预期:
1. 第一个动画开始后,不会因为后面两个动画的线程被阻塞而停止动作;
2. 后面两个线程的循环,可以通过 Sleep 让它停下来,动画也因此停下来,也可以解除 Sleep 让它继续,动画也因此继续。
我把例子代码打包发到:https://download.csdn.net/download/pcplayer/14921189