我有一个函数,调用时需要大约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 :(得分:1)
Flex / Actionscript的执行模型是单线程的。你必须采取一些棘手的方法来解决这个问题。
http://blogs.infosupport.com/flex-4-a-multi-threading-solution/
看看这个例子。
答案 1 :(得分:0)
我怀疑这是可能的。为什么?因为 Flash (Flex什么都不做)是单线程的,10秒的功能只会导致显示(因此浏览器,如果你在浏览器中显示它)要冻结。即使这样,您也可以尝试以下方法:
使用
强制刷新进度条progress.invalidateDisplayList();
在addChild
这会将进度条添加到重绘列表
答案 2 :(得分:0)
在Flash中,要重新绘制任何内容,您需要一个由swf(Event.ENTER_FRAME)处理的新帧。您的10秒钟功能应分为较短的呼叫,或者它确实只是挂起Flash播放器。如果你正在处理一些大的东西,那就用有限的部分来做。您可以使用getTimer()
功能来控制部分大小。