|  | 
 
| package {
 import flash.display.Bitmap;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.external.ExternalInterface;
 import flash.geom.Rectangle;
 import flash.system.MessageChannel;
 import flash.system.Worker;
 import flash.system.WorkerDomain;
 import flash.utils.ByteArray;public class WorkerTest extends Sprite
 {
 protected var mainToWorker:MessageChannel;
 protected var workerToMain:MessageChannel;
 
 protected var worker:Worker;
 
 [ Embed(source= "1.jpg")]
 public var Image1:Class;
 
 public function WorkerTest()
 {
 /**
 * Start Main thread
 **/
 if(Worker.current.isPrimordial){
 //Create worker from our own loaderInfo.bytes
 worker = WorkerDomain.current.createWorker(this.loaderInfo.bytes);
 
 //Create messaging channels for 2-way messaging
 mainToWorker = Worker.current.createMessageChannel(worker);
 workerToMain = worker.createMessageChannel(Worker.current);
 
 var byteArray:ByteArray = Bitmap(new Image1()).bitmapData.getPixels(new Rectangle(0,0,300,300));
 byteArray. shareable = true;        //使bytearray可以在两个线程中使用
 
 //Inject messaging channels as a shared property
 worker.setSharedProperty( "data", byteArray);
 
 //Listen to the response from our worker
 workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain);
 
 //Start worker (re-run document class)
 worker.start();
 
 }
 /**
 * Start Worker thread
 **/
 else {
 
 //Inside of our worker, we can use static methods to
 //access the shared messgaeChannel's
 var data:ByteArray = Worker.current.getSharedProperty( "data");
 workerToMain = Worker.current.getSharedProperty( "workerToMain" );
 
 //这里可以做一些压缩的工作
 data.compress();
 workerToMain.send(data);  //只要byteArray是shareable的,可以直接send
 
 }
 }
 //Messages to the worker thread
 protected function onWorkerToMain(event:Event): void {
 //Trace out whatever message the worker has sent us.
 var a:* = workerToMain.receive();
 trace("[Worker] " + a);
 ExternalInterface.call( "alert", a);     //debug版Flashbuilder4.6运行会收不到消息,但release版或断开debug连接就没问题
 }
 }
 }
 
 
 | 
 |