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