Я обнаружил, что мой интерфейс приложения Flex не реагирует на очень длинные циклы обработки (десятки секунд). Например, при обработке очень больших файлов XML и выполнении чего-то за элемент...
Есть ли эквивалент "ProcessMessages"? То есть, вызов, который подскажет, что Flex продолжит отвечать на события пользовательского интерфейса, даже в середине какого-то длинного цикла, чтобы пользовательский интерфейс не переставал отвечать на запросы?
Я знаю, что Flex однострочный по дизайну. Именно поэтому я ищу что-то вроде ProcessMessages() - функцию, которая позволяет однопоточным реентерабельным приложениям (например, в VB или однопоточных приложениях на основе C-конвейера) оставаться отзывчивыми в течение долгого времени операции.
Резюме ответов
- В Flex нет встроенной функции типа
HandleEvents()
илиProcessMessages()
. - Использование своего рода механизма обратного вызова для итеративного обработки фрагментов длинного процесса вычисления, при одновременном обеспечении времени выполнения между кусками, что позволяет ему реагировать, является единственным способом поддерживать отзывчивый интерфейс во время длительных вычислений.
- Способы достижения вышеуказанного:
- Использование события
enterFrame
, которое вызывается всякий раз, когда слой Flash "movie" ниже приложения Flex обновляет его фрейм (что-то вроде 20fps). - Использование таймера.
- Использование
UIComponent.callLater()
, которое планирует выполнение работы "позже". (как docs сказать: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.
- Использование намеренно инициированных событий мыши/клавиатуры для создания псевдо-рабочих потоков, как в в этом примере.
- Использование события
Если есть дополнительные предложения или если я что-то упустил, отредактируйте эту (сейчас) часть вики, не стесняясь.