Не придумал ничего лучше такого названия... Всё равно в пару слов не опишу.
Есть приложение, работающее в FP10. Приложение представляет из себя что-то типа графического редактора. Есть возможность сохранить результирующую картинку на локальный диск пользователя. Очень хочется сделать так, чтобы при нажатии на кнопку Save сперва выдавалось PopUp-окно с сообщением "Please, wait...", а потом, когда окно уже отрисовалось в приложении, начиналось JPEG-кодирование и сохранение картинки.
Если сделать такой вот простой код:

Код AS3:
var waitPopUp:IFlexDisplayObject = PopUpManager.createPopUp(this, WaitPopUp, true, PopUpManagerChildList.POPUP);
var bitmapData:BitmapData = (image.content as Bitmap).bitmapData;
var jpgEncoder:JPGEncoder = new JPGEncoder(100);
var byteArray:ByteArray = jpgEncoder.encode(bitmapData);
var file:FileReference = new FileReference();
file.save(byteArray, "result.jpg");
то PopUp-окно отрисоваться не успевает до того, как приложение начинает кодировать картинку в JPEG и отнимать 100% производительности. В итоге получается такое:
- нажатие на кнопку,
- ужасные тормоза,
- появление диалога Save File с проявившимся наконец-то PopUp-окном под ним.
В голову приходят варианты слушать события какие-то, либо ждать какое-то время, а потом кодировать файл, но это всё не проходит, потому что метод FileReference.save может быть выполнен только в обработчиках событий, связанных с действиями пользователя.
То есть, такой код:

Код AS3:
var timer:Timer = new Timer(Number(this.getStyle("modalTransparencyDuration")), 1);
timer.addEventListener(TimerEvent.TIMER,
function(event:TimerEvent):void
{
event.target.removeEventListener(event.type, arguments.callee);
var bitmapData:BitmapData = (image.content as Bitmap).bitmapData;
var jpgEncoder:JPGEncoder = new JPGEncoder(100);
var byteArray:ByteArray = jpgEncoder.encode(bitmapData);
var file:FileReference = new FileReference();
file.save(byteArray, "result.jpg");
}
);
var waitPopUp:IFlexDisplayObject = PopUpManager.createPopUp(this, WaitPopUp, true, PopUpManagerChildList.POPUP);
timer.start();
в принципе работает так, как мне нужно, за исключением того, что FileReference.save вызывается в обработчике TimerEvent.TIMER и потому я имею такой результат:
- нажатие на кнопку,
- вывод PopUp-окна,
- ужасные тормоза,
- вместо диалога File Save я тут, как и положено, получаю ошибку нарушения безопасности.
Может кто-то сталкивался с подобными задачами? Можно ли это сделать как-то красиво? Или нужно будет разделять кодирование с сообщением "Wait..." и сохранение на два шага, чтобы сохранение вызывалось при щелчке на какую-то другую кнопку?
В виду того, что кодирование сильно загружает процессор, очень хотелось бы выводить пользователю сообщение о том, что Конец Света ещё не наступил.
Либо, возможно, кто-то знаком с хорошим JPEG-кодировщиком, который не "вешает" приложение?