2010-10-11 5 views
1

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.

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

Répondre

0

A condition que vous disposez d'une connexion régulière, il est en fait surprenant que la progression du chargement d'un fichier de 700 Mo est pas représentée correctement avec votre barre de progression. Vous déclarez également que lors du débogage, vous pouvez voir les événements déclenchés. Cela m'amène à penser que le problème est du côté de l'affichage. Vous avez fourni le code pour l'écouteur de progression, il serait intéressant de voir ce que fait le code sur la vue.

Affichage de la progression du chargement est une tâche assez courante qui fonctionne bien sur de nombreuses applications, donc, bien que cela ne peut être exclu, je ne voudrais pas blâmer URLLoader dès le départ. Avez-vous d'autres processus en cours de chargement, des interférences possibles?

+0

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

Questions connexes