Sen*_*mes 6

简短的回答是 - 通过添加一个事件监听器来异步执行它.

很长的答案是它非常简单 - 如果你已经完成了一次,你已经完成了一百万次:

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);
}
Run Code Online (Sandbox Code Playgroud)

基本上,ActionScript虚拟机在"Dispatch Events,Process Events,Render Graphics"循环中运行; 每个帧,事件被给予一个时间片,并且每个事件"基本上"作为线程(将在)单处理器系统中运行.

虽然ActionScript不是多线程的,但它确实依赖于非常性感的事件驱动架构,在许多情况下它是线程的更好替代方案(请参阅此处的文章:http://www.stanford.edu/ class/cs240/readings/threads-bad-usenix96.pdf).

话虽这么说,希望AVM的未来版本将明确支持多线程,如果只是为了更好地利用几乎无处不在的多处理器系统.