actionscript 3 - Flex:查找设计模式以在我的应用"busy"时显示繁忙光标



我有一个Flex 4应用程序,它不时需要进行大量处理,这会导致用户等待几秒钟才能完成。我知道Flex允许通过光标管理器设置和删除繁忙的光标。我使用它如下:

CursorManager.setBusyCursor();    // add busy cursor
// execute lengthy processing here; e.g. switch to a new screen with a lot of layout
CursorManager.removeBusyCursor(); // remove busy cursor

然而,在实践中,对于某些情况,繁忙光标不会显示,或者,如果它显示,它会在删除之前显示(如果你眨眼,你会错过它)。这个想法是在进行长时间处理时显示繁忙的光标,而不是在处理完成后的几分之一秒内。

所以,我想知道是否有一种设计模式可以用来确保在执行长时间的处理步骤之前总是显示繁忙的光标。例如,这些处理步骤可以是:(1)转换到必须构建的具有复杂布局的新屏幕,或者(2)创建需要很长时间才能渲染的图表,等等。

我怀疑任何在Flex中设计的人都曾经遇到过这种情况。有没有一种通用的设计模式可以使用,或者每次都是一次独特的冒险,以确定在哪里执行繁忙的光标,使其在正确的时间显示?如有任何建议,不胜感激。

您的问题是,任何类型的"长时间处理"都会冻结UI,因此它将没有机会更新屏幕,因此在开始计算之前不会显示任何光标更改。

你可以做几件事,但在我们深入了解细节之前:当然,最好从一开始就避免冻结!你可以用两种方法之一来做到这一点:改变你的计算,这样你要么充分优化你的算法,使它们能够比当前帧速率更快地完成,要么将更长的计算分解成更小的块,从而在多个帧之间"分散"资源密集型循环,并允许屏幕在其间更新。您可以在当前FP版本中使用worker,也可以在旧版本中使用伪线程。

为了快速获得结果,只需在更改光标后使用setTimeout将繁重的过程延迟100ms。这样,屏幕可以在计算开始前更新。

最新更新