it might be that all the processing is too much to be displayed in the same frame. So this might help you
http://jimmyflex.blogspot.com/2007/11/dont-forget-power-of-calllater.html ~Peeyush http://www.mds.asia http://jimmyflex.blogspot.com/2007/11/dont-forget-power-of-calllater.html On Wed, Mar 3, 2010 at 6:53 AM, Christopher McArthur < cmcart...@riotgames.com> wrote: > > > Using Flex3 in AIR standalone application. > > > > I have a ton of children I need to add to a Canvas dynamically. When I do > this, it takes a long time. So I wanted to display a loading bar to the > user. > > > > I create a Timer, and every time the timer ticks, I update the loadingBar > and I add the child. I also update a textField with the loading progress as > a debug tool. > > > > What I find is that the textField _always_ updates correctly in realtime, > but USUALLY the progress bar does NOT update at all until the entire > sequence is finished. If I make the tick time long enough, then the progress > bar works, but this time seems very dependent on performance of the > individual machine. > > > > My question is, how do I know what the lowest possible tick time I can use > to make the progress bar update correctly is? Why does it work with the Text > field just fine? Or is there a better pattern I could be using to do this > correctly? > > > > As you can see from the code, I tried some things like "updateAfterEvent" > and "invalidateDisplayList" to see if I could get it to update faster, but > those did not work (unless I set the tick time high). > > > > code here: > > > > *private* *var* pendingElementsToAdd:Array; > > *private* *var* totalElementstoAdd:int; > > *private* *static* *const* TIME_BETWEEN_ADDS:Number = 20; > > > > > > *private* *function* addElements(newElements:Array):*void* > > { > > * this*.pendingElementsToAdd = newElements; > > *this*.totalElementstoAdd = *this*.pendingElementsToAdd.length; > > var newEventTimer:Timer = *new* Timer(TIME_BETWEEN_ADDS, > newElements.length); > > newEventTimer.addEventListener(TimerEvent.TIMER, > onTimerAddNewElement); > > newEventTimer.addEventListener(TimerEvent.TIMER_COMPLETE, > finishAddingElements); > > newEventTimer.start(); > > } > > > > *private* *function* onTimerAddNewElement(event:TimerEvent):*void* > > { > > *this*.loadingBar.setProgress(*this*.totalElementstoAdd > - *this*.pendingElementsToAdd.length, *this*.totalElementstoAdd); > > *this*.loadingText.text = *"Elements To Load: "* + *this > *.pendingElementsToAdd.length; > > > > event.updateAfterEvent(); > > *this*.loadingBar.invalidateDisplayList(); > > > > *this*.addChild(*this*.pendingElementsToAdd.pop()); > > } > >