我有一个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中设计的任何人都曾经遇到过这种情况。是否有可以使用的通用设计模式,或者每次都能确定执行忙碌光标的确切位置以便在正确的时刻显示?任何建议表示赞赏。
答案 0 :(得分:1)
您的问题是任何类型的“冗长处理”都会冻结用户界面,因此无法更新屏幕 - 因此在开始计算之前不会显示任何光标更改。
你可以做一些事情,但在我们进入细节之前:当然最好是在第一时间发生冻结!您可以通过以下两种方式之一完成此操作:更改计算,以便您可以充分优化算法,使其能够比当前帧速率更快地完成,或者将更长的计算分解为更小的块,从而“扩散”资源跨多个帧的密集循环 - 并允许屏幕在两者之间更新。您可以在当前FP版本中使用workers,在旧版FP中使用pseudo threads。
为了快速获得结果,只需在更改光标后使用setTimeout
,将繁重过程延迟100ms。这样,屏幕可以在计算开始之前更新。