【问题标题】:Animate TAnimate while IdHTTP.Post is working in the background?IdHTTP.Post 在后台工作时为 TAnimate 设置动画?
【发布时间】:2013-07-17 18:47:36
【问题描述】:

使用 Delphi XE2,如何在 TIdHTTP 对象在后台工作时播放/更新 TAnimate 动画?例如,我有 IdHTTP1.Post 在远程服务器上等待这个 PHP“应用程序”完成:

<?php
echo date('h:i:s') . "\n";
sleep(5);
echo date('h:i:s') . "\n";
?>

在这 5 秒内,即使是线程定时器 (TJvThreadTimer) 也不会触发!我还尝试使用带有 CreateTask 的 OmniThreadLibrary 将 IdHTTP1.Post 放入单独的线程中。即使在这种情况下,线程计时器也不会触发,TAnimate 动画也不会更新。
那么,当IdHTTP1.Post 在后台工作时,我可以做些什么来为动画制作动画?

【问题讨论】:

  • 只需将 HTTP POST 任务放到后台线程并在主线程中播放动画(在您的表单上)。还是我错过了什么? POST 工作时更新动画的确切含义是什么?
  • @TLama 动画应该简单地播放,目的是为了以一种很好的方式向用户展示程序不会挂起。但是我已经将 HTTP POST 放在后台任务中,但是动画没有播放。
  • 动画是否播放过(我的意思是在一个普通的项目中)?你有Windows以上的Vista吗?你要展示一些 Explorer 动画吗?如果您对上述评论的回答是“否”、“是”和“是”,则将 ShellAnimations 单元添加到您的 uses 子句中。
  • 我当然知道 ShellAnimations 的事情,当然动画在没有 HTTP POST 工作的情况下播放。
  • 在一个线程中播放动画几乎没有表明另一个线程中的操作没有挂起。为了真正证明没有挂起,负责执行实际工作的线程需要与负责推进动画的线程相同。

标签: multithreading delphi animation delphi-xe2 idhttp


【解决方案1】:

似乎只要在表单上放置一个 TIdAntiFreeze 组件(并将其 IdleTimeOut 属性设置为 10 而不是默认的 250)就可以轻松解决该问题。不需要线程,当 IdHTTP.Post 在后台运行 5 秒时,动画就可以正常播放!很不错!

【讨论】:

  • 这真是丑陋的解决方法。您应该为此任务使用工作线程。恕我直言,每当您使用 TIdAntiFreeze 时,您的设计理念或代码中都有问题。
  • @TLama 感谢您的评论。你能解释一下为什么应该使用工作线程而不是TIdAntiFreeze吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2017-10-29
相关资源
最近更新 更多