прогрессбар для большой функции - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть функция, которая при вызове занимает около 10 секунд для запуска. Я хотел бы добавить простой индикатор выполнения, чтобы показать пользователю, что что-то происходит, но progressBar не запускается, пока функция не завершится

btn.addEventListener("click",bigFunction);

private function bigFunction(event:Event):void{
     var progress:ProgressBar = new ProgressBar();
     progress.indeterminate = true;
     progress.validateNow();
     mainPanel.addChild(progress)

    // do massive loop

}

Есть ли способ заставить индикатор выполнения работать до завершения остальных функций? Приветствия

Ответы [ 3 ]

1 голос
/ 24 ноября 2011

Модель выполнения для Flex / Actionscript является однопоточной. Вы должны предпринять некоторый хитрый подход, чтобы справиться с этим.

http://blogs.infosupport.com/flex-4-a-multi-threading-solution/

Взгляните на этот пример.

0 голосов
/ 24 ноября 2011

Во Flash, чтобы перекрасить что-либо, вам нужен новый кадр, который будет обработан swf (Event.ENTER_FRAME). Ваша 10-секундная функция должна быть разделена на более короткие вызовы, или она просто зависает в проигрывателе Flash. Если вы обрабатываете что-то большое, делайте это небольшими порциями. Вы можете использовать функцию getTimer() для контроля размера порции.

0 голосов
/ 24 ноября 2011

Я сомневаюсь, что это возможно. Зачем? Поскольку Flash (Flex ничего не делает) является однопоточным, 10-секундная функция просто вызывает зависание дисплея (и, следовательно, браузера, если он отображается в браузере). Тем не менее, вы можете попробовать следующее:

Принудительно обновить панель прогресса, используя

progress.invalidateDisplayList();

после addChild

Это добавит индикатор выполнения в список перерисовки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...