相关疑难解决方法(0)

在长循环期间,Flex等效于ProcessMessages和无响应的UI

我发现我的Flex应用程序的UI在很长的处理循环(几十秒)内变得没有响应.例如,在处理非常大的XML文件并对每个元素执行某些操作时...

是否有"ProcessMessages"的等价物?也就是说,一个调用会告诉Flex继续响应UI事件,即使在一些长循环的中间,这样UI也不会无响应?

我知道Flex是单线程设计.这就是为什么我正在寻找像ProcessMessages()这样的函数 - 一个允许单线程可重入应用程序(如VB或基于单线程消息循环的C++应用程序)在长时间运行期间保持响应的函数.

答案摘要

  1. 有没有像内置函数HandleEvents()ProcessMessages()Flex中.
  2. 使用某种回调机制迭代地处理长计算过程的块,同时在块之间屈服于运行时,从而使其能够响应,是在长计算期间维持响应UI的唯一方法.
  3. 完成上述方法的方法是:
    1. 使用enterFrame事件,只要Flex应用程序下面的Flash"影片"图层刷新其帧(类似于20fps),就会调用该事件.
    2. 使用计时器.
    3. 使用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.
    4. 使用有意触发的鼠标/键盘事件来创建伪"工作线程",如本例所示.

如果有进一步的建议,或者我遗漏了任何东西,请随时编辑这个(现在的)维基片.

apache-flex user-interface

11
推荐指数
1
解决办法
4485
查看次数

定时器与setTimeout

flash.utils.setTimeout()状态的文档:

考虑使用1作为repeatCount参数(将计时器设置为仅运行一次),而不是使用此方法,而是考虑使用指定的时间间隔创建Timer对象.

有谁知道这样做是否有(显着)优势?当你只需要延迟1次调用时,使用setTimeout会容易得多.

apache-flex actionscript-3

10
推荐指数
2
解决办法
2万
查看次数

快速或异步AS3 JPEG编码

我目前正在使用JPGEncoderAS3核心库来将位图编码为JPEG

 var enc:JPGEncoder = new JPGEncoder(90);
 var jpg:ByteArray = enc.encode(bitmap);
Run Code Online (Sandbox Code Playgroud)

由于位图相当大(3000 x 2000),编码需要很长时间(大约20秒),导致应用程序在编码时看似冻结.要解决这个问题,我需要:

  • 一个异步编码器,所以我可以在编码时不断更新屏幕(带进度条或其他东西)
  • 另一种编码器,速度更快

是否可能,我该怎么办?

jpeg actionscript actionscript-3

5
推荐指数
2
解决办法
9135
查看次数