我发现我的Flex应用程序的UI在很长的处理循环(几十秒)内变得没有响应.例如,在处理非常大的XML文件并对每个元素执行某些操作时...
是否有"ProcessMessages"的等价物?也就是说,一个调用会告诉Flex继续响应UI事件,即使在一些长循环的中间,这样UI也不会无响应?
我知道Flex是单线程设计.这就是为什么我正在寻找像ProcessMessages()这样的函数 - 一个允许单线程可重入应用程序(如VB或基于单线程消息循环的C++应用程序)在长时间运行期间保持响应的函数.
答案摘要
HandleEvents()或ProcessMessages()Flex中.enterFrame事件,只要Flex应用程序下面的Flash"影片"图层刷新其帧(类似于20fps),就会调用该事件.UIComponent.callLater()哪些计划工作"稍后"完成.(正如文档所说:Queues a function to be called later. Before each update of the screen, Flash Player or AIR calls the set of functions that are scheduled for the update.如果有进一步的建议,或者我遗漏了任何东西,请随时编辑这个(现在的)维基片.
flash.utils.setTimeout()状态的文档:
考虑使用1作为repeatCount参数(将计时器设置为仅运行一次),而不是使用此方法,而是考虑使用指定的时间间隔创建Timer对象.
有谁知道这样做是否有(显着)优势?当你只需要延迟1次调用时,使用setTimeout会容易得多.
我目前正在使用JPGEncoderAS3核心库来将位图编码为JPEG
var enc:JPGEncoder = new JPGEncoder(90);
var jpg:ByteArray = enc.encode(bitmap);
Run Code Online (Sandbox Code Playgroud)
由于位图相当大(3000 x 2000),编码需要很长时间(大约20秒),导致应用程序在编码时看似冻结.要解决这个问题,我需要:
是否可能,我该怎么办?