2013-08-03 2 views
5

Aus irgendeinem Grund, wenn ich versuche, eine gemeinsame Eigenschaft von einem Worker (in AS3) zu erhalten, ist das Ergebnis immer null. Das heißt, ich sende einen Wert an eine Worker mit setSharedProperty(), wenn ich es unter Verwendung getSharedProperty() abrufen, gibt es immer undefined/null zurück.Worker wird beim Abrufen der gemeinsamen Eigenschaft null.

Hier ist ein einfacher Test, den ich ein:

package 
{ 
    import flash.display.Sprite; 
    import flash.system.Worker; 
    import flash.system.WorkerDomain; 

    public class Main extends Sprite 
    { 
     private var _worker:Worker; 

     public function Main():void 
     { 
      if (Worker.current.isPrimordial) 
      { 
       initMain(); 
      } 
      else 
      { 
       initWorker(); 
      } 
     } 

     private function initMain():void 
     { 
      _worker = WorkerDomain.current.createWorker(this.loaderInfo.bytes); 

      _worker.setSharedProperty("message", "test"); 
      _worker.start(); 
     } 

     private function initWorker():void 
     { 
      _worker = Worker.current; 

      var message:String = _worker.getSharedProperty("message"); 

      trace(message); 
     } 

    } 

} 

Als ich message verfolgen, ist das Ergebnis null. Obwohl mein Hauptziel ist, eine AIR-App zu erstellen, bekomme ich das gleiche Ergebnis, egal ob ich für AIR (3.7) oder Flash Player kompiliere (11.6, 11.7 erkennt flash.system.Worker nicht als gültige Klasse) .

Ich kompiliere mit dem Flex SDK, über FlashDevelop. Weiß jemand was falsch ist, vielleicht habe ich etwas in meinem Code verpasst?

+1

Ich habe keine Antwort auf Ihre m Ain Problem, aber das Problem mit Flash 11.7 nicht zu erkennen, Klassen möglicherweise aufgrund Ihrer playerglobal.SWC oder der SWF-Version, die kompiliert wird. Die aktuelle SWF-Version scheint 19 zu sein. Sie müssen möglicherweise eine angeben, die die Funktion "Worker" enthält. –

+0

Ah, danke dafür. Nach dem Aktualisieren von FlashDevelop (das auch die Flex- und AIR-SDKs aktualisiert) wird jetzt für 11.7 kompiliert. Das Hauptproblem besteht jedoch weiterhin. – puggsoy

+0

Fügen Sie 'trace (_worker.getSharedProperty (" message "))' direkt nach '_worker.setSharedProperty (" message "," test ")' hinzu. Hast du die Immobilie dann? Wenn nicht, müssen wir nicht einmal die Funktion 'initWorker' diskutieren, da wir feststellen können, dass das Problem vorher beginnt. –

Antwort

1

FlashDevelop scheint jetzt vollständige Unterstützung für das Debuggen von Arbeitern zu haben, was bei älteren Versionen nicht wirklich der Fall war (Sie konnten innerhalb von Arbeitern weder brechen noch nachverfolgen). AIR SDK Arbeiter Unterstützung fortgeschritten ist auch (ich erinnere mich, die Dinge in Release arbeiten in Debug-Version brechen würde) ich neu kompiliert nur Ihre Probe mit AIR SDK 14 Release (14.0.0.110)

air14_sdk_win/bin/mxmlc -swf-version=25 -debug=true Main.as 

und debuggt es mit Shockwave Flash-Debugger 14,0,0,125 und FlashDevelop 4.6.1.30 und bekam das erwartete Ergebnis:

[Starting debug session with FDB] 
Created Worker 2 
test 

Beachten Sie, dass jedes Element in Ihrer Debug-Kette (sdk/Player/Debugger) in Problemen für das Debuggen nicht up-to-date führen könnte Arbeiter

+1

Ah, das ist gut zu wissen! Ich benutze Flash momentan nicht mehr, aber ich schätze deine Antwort trotzdem! Da es nichts Besseres zu tun gibt, nehme ich an, dass ich das markieren werde, um zu zeigen, dass das Problem gelöst ist, auch wenn dies die Frage technisch nicht beantwortet (es teilt mir lediglich eine Lösung mit). – puggsoy

Verwandte Themen