我有一个繁忙的功能需要几秒钟才能执行。在函数的顶部,我将忙碌指示器设置为可见,在底部我将其设置为不可见。但是执行该功能时显示不会改变,并且不显示忙指示。这是代码结构
public function busyFunction():void{
busyIndicator.visible = true;
doStuff .. // takes several seconds
busyIndicator.visible = false;
}
我只想在busyIndicator.visible = true
正在进行时执行第一行(doStuff
)。
此致
答案 0 :(得分:1)
问题是因为Flex在您的方法执行时不会重绘屏幕。因此,您可以使忙碌指示器可见,执行操作并隐藏指示器。但是还没有对屏幕进行更新,因此指示器永远不会显示。
Flex“弹性赛道”范例基本上表示您的应用程序包含两个循环,一个用于执行逻辑,另一个用于更新屏幕。因此,您需要将忙碌指示器设置为可见,然后在至少一个更新周期之后将其消失。
要使这种事情发挥作用,您需要异步执行doStuff()
。执行此操作的一些代码可能如下所示:
private function startDoingStuff():void
{
busyIndicator.visible = true;
// dispatch "doStuff" event
dispatchEvent(new Event("doStuff"));
return; // returning here is important don't do stuff here
}
private function onDoStuff(e:Event):void
{
// do stuff;
busyIndicator.visible = false;
}
另一个想法是使用Flex的callLater()
方法来执行doStuff()
方法。这应该保证doStuff()
在下一个周期执行:
private function startDoingStuff():void
{
busyIndicator.visible = true;
callLater(onDoStuff);
}
private function onDoStuff():void
{
// do stuff
busyIndicator.visible = false;
}