progressBar用于大功能

时间:2011-11-23 20:39:09

标签: flex

我有一个函数,调用时需要大约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

}

有没有办法强制进度条在完成其余功能之前运行。干杯

3 个答案:

答案 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()功能来控制部分大小。