J'ai un ProgressBar en mode MANUEL répondant aux événements de progression d'un URLLoader qui semble se dessiner beaucoup moins fréquemment que je le souhaiterais. Si je débogue l'application, je peux voir de nombreux événements tirant à partir de l'URLLoader mais il semble que le ProgressBar est en train d'être redessiné à un rythme aléatoire et lent.Forcer des mises à jour d'écran pour un ProgressBar attaché à un URLLoader ou le ralentir
Maintenant, si c'était mon propre code (URLLoader est une boîte noire), je ferais une pause de temps en temps pour laisser l'interface utilisateur mettre à jour, disons via une boucle avec un minuteur. Je suppose que le URLLoader lui-même bloque le thread principal du traitement du code de dessin. Ajouter validateNow() et invalidateDisplayList() ne semble pas aider beaucoup.
private function onLoadProgress(resource: TResource, evt: ProgressEvent): void
{
_progressDialog.prbCurrentItem.setProgress(evt.bytesLoaded, evt.bytesTotal);
_progressDialog.prbCurrentItem.validateNow();
_progressDialog.prbCurrentItem.invalidateDisplayList();
}
Maintenant il y a beaucoup TResources (juste une classe qui peut gérer ses données) en cours de chargement dans l'ordre, mais le URLLoader est si gourmand qu'il ne laisse pas l'interface utilisateur sont mis à jour plus de quelques fois lors du chargement & traitement (analyse des objets XML) 50 ou 10 Ko de fichiers. Donc, le simple fait de compter les fichiers chargés visuellement ne fonctionne pas non plus; J'ai la chance d'avoir 2-3 mises à jour de l'écran tout le temps.
Charger un fichier de 700 Mo semble beaucoup mieux, mais encore une fois les mises à jour de la barre de progression sont aléatoires et lentes.
De plus, j'aimerais savoir s'il existe un moyen d'influencer ou même de contrôler la vitesse à laquelle ProgressEvents est déclenché par la classe URLLoader. Je n'ai pas pu trouver à quel rythme il distribue normalement les événements de progrès; est-ce à un pourcentage fixe par fichier ou tous les x images ou millisecondes? Comme il s'agit de fichiers locaux, serais-je mieux de ne pas utiliser la classe URLLoader et de passer à FileStream?
Environnement
- Flex SDK 4.1.0.16076
- application à Compiler AIR
- App framerate 60
- OS est Windows 7 x64
Mon mauvais, devrait ont regardé plus dur.
.-'---`-.
,' `.
| \
| \
\ _ \
,\ _ ,'-,/-)\
(* \ \,' ,' ,'-)
`._,) -',-')
\/ ''/
) //
/ ,'-'
La connexion est SATA à un disque dur; J'utilise URLLoader pour charger les fichiers locaux pour le moment. Mais il semble que vous avez raison, j'ai trouvé du code dans une bibliothèque qui bloquait le thread principal, donc URLLoader n'est pas à blâmer du tout. Maintenant tout est lisse. – Atorian