2011-11-23 38 views
0

我有一個函數,當被調用需要大約10秒運行。我想補充一個簡單的進度條顯示有事情發生的用戶,但進度不運行,直到功能完成progressBar爲大功能

btn.addEventListener("click",bigFunction); 

private function bigFunction(event:Event):void{ 
    var progress:ProgressBar = new ProgressBar(); 
    progress.indeterminate = true; 
    progress.validateNow(); 
    mainPanel.addChild(progress) 

    // do massive loop 

} 

有沒有辦法迫使進度條,其餘前運行的功能已完成。歡呼聲

回答

0

我懷疑這是可能的。爲什麼?因爲Flash(Flex不做任何事情)是單線程的,10秒的功能只會導致顯示(並因此如果您在瀏覽器中顯示瀏覽器)導致凍結。即便如此,你可以嘗試以下方法:使用

progress.invalidateDisplayList(); 

addChild

後的進度

強制刷新這將進度添加到重繪列表

+1

不幸的是,這不會強制玩家重繪。無效只是告訴玩家,這個組件需要重繪。但是它不會被重新繪製,直到代碼階段完成其工作。 –

+0

@TimofeiDavydik,對吧!我改變了答案 –

0

在Flash中,重繪任何東西,你需要一個新的框架由swf(Event.ENTER_FRAME)處理。您的10秒鐘功能應該分成更短的通話時間,或者確實只是掛起了Flash播放器。如果你正在處理的東西很大,請在有限的部分進行。您可以使用getTimer()函數來控制部分大小。