gpt4 book ai didi

apache-flex - Flex 等效于 ProcessMessages 和长循环期间无响应的 UI

转载 作者:行者123 更新时间:2023-12-03 22:07:05 25 4
gpt4 key购买 nike

我发现我的 Flex 应用程序的 UI 在很长的处理循环(几十秒)中变得无响应。例如,在处理非常大的 XML 文件并为每个元素做一些事情时......

是否有等效的“ProcessMessages”?也就是说,一个调用会告诉 Flex 继续响应 UI 事件,即使是在某个长循环的中间,这样 UI 就不会变得无响应?

我知道 Flex 设计为单线程 .这正是我要寻找类似 ProcessMessages() 之类的东西的原因——一个允许 的函数单线程可重入应用程序(如在 VB 中,或基于单线程消息循环的 C++ 应用程序)在长时间操作期间保持响应。

答案摘要

  • 没有像 HandleEvents() 这样的内置函数或 ProcessMessages()在 Flex 中。
  • 使用某种回调机制来迭代处理长计算过程的块,同时让步于块之间的运行时,从而使其具有响应性,是在长计算期间保持响应式 UI 的唯一方法。
  • 实现上述的方法有:
  • 使用 enterFrame事件,每当 Flex 应用程序下方的 Flash“电影”层刷新其帧(类似于 20fps)时都会调用该事件。
  • 使用定时器。
  • 使用 UIComponent.callLater()它安排了“稍后”完成的工作。 (作为文档 say : 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.
  • 使用有意触发的鼠标/键盘事件来创建伪“工作线程”,如 this example .

  • 如果有进一步的建议,或者如果我遗漏了任何内容,请随时编辑此(现在)维基文章。

    最佳答案

    问题在于 Flash 是单线程的,即在部分代码运行之前,无法进行其他处理。您需要以某种方式将处理分解为更小的块并执行这些块,例如,在 enterFrame 上执行。事件。

    编辑 :恐怕对这个(或 Simon 的)答案投反对票并不会改变这在 AS3 中不可行的事实。阅读 this article以更深入地了解问题。本文还包括一个名为 PseudoThread 的简单“库”,它有助于执行长时间的后台计算。不过,您仍然必须自己将问题分解为更小的部分。

    关于apache-flex - Flex 等效于 ProcessMessages 和长循环期间无响应的 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560474/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com