Apache flex 强制对连接到URLLoader的ProgressBar进行屏幕更新或降低其速度

Apache flex 强制对连接到URLLoader的ProgressBar进行屏幕更新或降低其速度,apache-flex,actionscript-3,actionscript,flex4,Apache Flex,Actionscript 3,Actionscript,Flex4,我有一个手动模式的ProgressBar来响应URLLoader的进度事件,它的绘制频率似乎比我希望的要低得多。如果我调试这个应用程序,我可以看到许多事件从URLLoader中触发,但ProgressBar似乎正在以某种随机和缓慢的速度重新绘制 现在,如果这是我自己的代码,URLLoader是一个黑匣子,我会偶尔暂停一下,让UI更新,比如说通过计时器循环。我假设URLLoader本身正在阻止主线程处理绘图代码。添加validateNow和invalidateDisplayList似乎没有多大帮助

我有一个手动模式的ProgressBar来响应URLLoader的进度事件,它的绘制频率似乎比我希望的要低得多。如果我调试这个应用程序,我可以看到许多事件从URLLoader中触发,但ProgressBar似乎正在以某种随机和缓慢的速度重新绘制

现在,如果这是我自己的代码,URLLoader是一个黑匣子,我会偶尔暂停一下,让UI更新,比如说通过计时器循环。我假设URLLoader本身正在阻止主线程处理绘图代码。添加validateNow和invalidateDisplayList似乎没有多大帮助

private function onLoadProgress(resource: TResource, evt: ProgressEvent): void 
{
  _progressDialog.prbCurrentItem.setProgress(evt.bytesLoaded, evt.bytesTotal);
  _progressDialog.prbCurrentItem.validateNow();
  _progressDialog.prbCurrentItem.invalidateDisplayList();
}
现在有很多TResources,只是一个类可以管理其按顺序加载的数据,但是URLLoader非常贪婪,当将解析加载到XML对象50或10KB左右的文件时,它不会让UI更新超过几次。因此,仅仅计算视觉加载的文件也不起作用;我很幸运,在整个过程中都有2-3次屏幕更新

加载一个700MB的文件看起来要好得多,但进度条更新也是随机的,而且速度很慢

此外,我想知道是否有任何方法可以影响甚至控制URLLoader类触发ProgressEvents的速率。我也无法找到它通常以什么速度发送进度事件;它是以每个文件固定的百分比还是每x帧或毫秒一次

由于这些是本地文件,我最好不要使用URLLoader类,而是切换到FileStream

环境

Flex 4.1.0.16076 SDK 编译到AIR应用程序 应用程序帧率为60 操作系统是Windows7x64 我的坏孩子,应该更努力地寻找

  .-'---`-.
,'          `.
|             \
|              \
\           _  \
,\  _    ,'-,/-)\
( * \ \,' ,' ,'-)
 `._,)     -',-')
   \/         ''/
    )        / /
   /       ,'-'

如果您有一个固定的连接,那么700MB文件的加载进度并没有用进度条准确地表示出来,这实际上是令人惊讶的。您还声明在调试时可以看到触发的事件。这会让我认为问题出在显示器方面。您已经为progress listener提供了代码,查看代码在视图上的作用会很有趣


显示加载进度是一项非常常见的任务,在许多应用程序中都能正常工作,因此,尽管不能排除这一点,但我不会马上责怪URLLoader。加载时是否有任何其他进程正在进行,是否存在任何可能的干扰?

连接是SATA到HDD;我正在使用URLLoader加载本地文件。但是你似乎是对的,我在一个库中发现一些代码阻塞了主线程,所以URLLoader根本不是罪魁祸首。现在一切都很顺利。