在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.