FLEX:对话框不会立即显示

在AIR应用程序中,我有以下代码:

theDialog = PopUpManager.createPopUp( this, TheDialogClass, true ) as TheDialogClass;
theDialog.addEventListener(FlexEvent.CREATION_COMPLETE, cpuIntensiveCalc);

在cpuIntensiveCalc结束时,将删除该对话框.该对话框通知用户“正在发生的事情,请等待.”

问题是cpuIntensiveCalc在对话框绘制之前启动.因此,用户体验是应用程序在没有指示器的情况下冻结10秒钟,然后模式对话框在屏幕上快速闪烁(不到一秒钟).

Adobe文档说这是关于creation_complete的

Dispatched when the component has finished its construction,
property processing, measuring, layout, and drawing.

所以这感觉就像是正确的事件.
以完整的名义,我也尝试过

theDialog = PopUpManager.createPopUp( this, TheDialogClass, true ) as TheDialogClass;
cpuIntensiveCalc();

但结果相同.

TIA

最佳答案 原因是Flash Player是单线程的,因此您阻止UI对Dialog Popup做出反应,直到数学块完成为止.

Hacky修复时间……

你有两个选择.

(这个应该可以工作,但是未经测试)在callLater中包装cpuIntensiveCalc()调用,以便UI可以在阻止呈现之前完成呈现.

要么

使用“绿色线程”来分解您的处理,以便您不会完全阻止UI处理. Take a look.

点赞