在 AIR 应用程序中,我有以下代码:
theDialog = PopUpManager.createPopUp( this, TheDialogClass, true ) as TheDialogClass; theDialog.addEventListener(FlexEvent.CREATION_COMPLETE, cpuIntensiveCalc);
在 cpuIntensiveCalc 结束时,对话框被删除。该对话框通知用户“有事情发生,请稍等”。
问题是 cpuIntensiveCalc 在对话框绘制之前启动。所以用户体验是应用程序在没有指示器的情况下卡住 10 秒,然后模态对话框在屏幕上快速闪烁(不到一秒)。
Adobe docs 说这是关于 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 对对话框弹出窗口使用react,直到数学块完成。
哈克修复时间...
你有两个选择。
(这个应该可以工作,但未经测试)将 cpuIntensiveCalc() 调用包装在 callLater 中,以便 UI 可以在您阻止渲染之前完成渲染。
或者
使用“绿色线程”来分解你的处理,这样你就不会完全阻塞 UI 处理。 Take a look .
关于apache-flex - 弹性 : dialog not display immediately,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410398/