强制附加到URLLoader的ProgressBar的屏幕更新或降低其速度

时间:2010-10-11 14:29:57

标签: flex actionscript-3 actionscript flex4

我在手动模式下有一个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非常贪婪,以至于在加载和放置时,它不会让UI更新几次。处理(解析成XML对象)50个左右的10KB文件。所以只计算视觉上加载的文件也不起作用;我很幸运能够在整个时间内获得2-3次屏幕更新。

加载一个700MB的文件看起来好多了,但进度条更新是随机的,也很慢。

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

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

环境

  • Flex 4.1.0.16076 SDK
  • 编译为AIR app
  • App frameRate为60
  • 操作系统是Windows 7 x64

我的坏,应该看起来更难。

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

1 个答案:

答案 0 :(得分:0)

如果您有常规连接,实际上令人惊讶的是,使用进度条无法准确表示700MB文件的加载进度。您还说明在调试时您可以看到被触发的事件。这会让我认为问题出在显示方面。您已经为进度监听器提供了代码,看看代码在视图上的作用会很有趣。

显示加载进度是一项非常常见的任务,可以在许多应用程序中正常工作,因此,虽然不能排除这种情况,但我不会直接责怪URLLoader。在装载时是否有任何其他过程,任何可能的干扰?