apache-flex - 强制 Flex 更新屏幕?

标签 apache-flex redraw

这可能是一个初学者的问题,但我一生都无法弄清楚。

我正在使用 flex 为大型项目开发 GUI,特别是底部的状态栏。在我的 StatusBar 类中,有一个 ProgressBar,其他正在工作的类可以告诉它在进行时更新(更改条形完成和标签)。我遇到的问题是 flex 不会更新屏幕上显示的内容,直到为时已晚,例如

ProgressBar 已初始化,已完成 0%
某个类将 ProgressBar 设置为完成 12%
某个类(class)做了一些工作
某些类将 ProgressBar 设置为完成 56%

发生的事情是 12% 的完成度永远不会显示,它在工作期间只是卡在 0% 处,然后直接跳到 56% 的完成度。我试图了解 flex 组件的生命周期(失效和验证),我想我理解它并正确应用它,但它根本不起作用。我需要告诉 flex 重绘我的 StatusBar(或至少其中的 ProgressBar)在某个类将它设置为 12% 完成之后,但在某个类开始工作之前。我该怎么做呢?

最佳答案

正如其他答案中提到的,flash 播放器是单线程的,如果你不把你的工作分解成可以在单独的“帧”中执行的离散块,你会在 ui 中看到跳跃和口吃,这是有效地你所看到的。

如果您确实必须看到 12% 的消息,那么仅使显示列表无效是不够的,因为在 56% 的工作完成之前显示列表没有机会更新,您必须明确地中断自然事件循环调用 validateNow()设置好消息后。

然而,如果性能受到关注,这并不是最好的处理方式。您可能会使用 callLater() 的司法用法。依次安排每个工作块,因为这将允许播放器在尝试过程中的下一步之前可能完成一个帧循环(并更新显示列表)。

关于apache-flex - 强制 Flex 更新屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120822/

相关文章:

apache-flex - Flex 3 中 AIR 应用程序的峰值内存

java - 我正在从 USPS 获取串联地址行..我想以某种方式打破它

winforms - 什么会导致.NET WInForms中的64位Vista而不是32位重新绘制问题?

javascript - 具有 div 类的图形动画和使用 javascript 的 sleep 功能更新未同步完成

java - 跨浏览器和 flex air 共享 session

apache-flex - 柔性 : How to right align cells in s:DataGrid?

cocoa - Mac Dev - 如何刷新 2d 游戏的 View ?

android - 重绘 ListView 中的单行

c++ - 如何在 openGL 中移动窗口时重绘图片?

apache-flex - flashdevelop 与 flex builder