Краткий ответ - добавив прослушиватель событий, чтобы сделать это асинхронно.
Длинный ответ заключается в том, что это довольно просто - если вы сделали это один раз, вы сделали это миллион раз:
var site_loader:Loader;
var your_text_field:TextField;
init();
start_load();
function init():void
{
site_loader = new Loader();
this.addChild(site_loader);
your_text_field = new TextField();
this.addChild(your_text_field);
}
function start_load():void
{
site_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, update_progress_text);
site_loader.addEventListener(Event.COMPLETE, start_site);
site_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, load_error);
var url_path:String = "path/to/content.swf";
var url_request:URLRequest = new URLRequest(url_path);
site_loader.load(url_request);
}
function update_progress_text(event:ProgressEvent):void
{
var site_loader_progress:int = 100 * event.bytesLoaded / event.bytesTotal;
your_text_field.text = site_loader_progress + " %";
}
function start_site(event:Event):void
{
site_loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, update_progress_text);
site_loader.removeEventListener(Event.COMPLETE, start_site);
site_loader.removeEventListener(IOErrorEvent.IO_ERROR, load_error);
}
В основном виртуальная машина ActionScript запускается в цикле «События отправки, События процесса, Визуализация графики»; каждому кадру, событиям дается временной интервал, и каждое событие «по существу» запускается как поток (будет) в однопроцессорной системе.
Хотя ActionScript не является многопоточным, он опирается на очень привлекательную архитектуру, управляемую событиями, которая во многих случаях является лучшей альтернативой потокам (см. Эту статью здесь: http://www.stanford.edu/class/cs240/readings/threads-bad-usenix96.pdf).
При этом, надеюсь, что будущие версии AVM будут иметь явную поддержку нескольких потоков, хотя бы для того, чтобы лучше использовать почти повсеместные многопроцессорные системы.