我在手动模式下有一个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吗?
环境
我的坏,应该看起来更难。
.-'---`-.
,' `.
| \
| \
\ _ \
,\ _ ,'-,/-)\
( * \ \,' ,' ,'-)
`._,) -',-')
\/ ''/
) / /
/ ,'-'
答案 0 :(得分:0)
如果您有常规连接,实际上令人惊讶的是,使用进度条无法准确表示700MB文件的加载进度。您还说明在调试时您可以看到被触发的事件。这会让我认为问题出在显示方面。您已经为进度监听器提供了代码,看看代码在视图上的作用会很有趣。
显示加载进度是一项非常常见的任务,可以在许多应用程序中正常工作,因此,虽然不能排除这种情况,但我不会直接责怪URLLoader。在装载时是否有任何其他过程,任何可能的干扰?