0

私のアプリケーションでは、接続後の段階の任意の時点でURLLoaderインスタンスを中止/閉じることができる必要があります。つまり、接続してファイル転送がすでに開始されているかどうか、または接続していてファイル転送がまだ開始されていないかどうかに関係なく(サーバーはまだファイルの送信を開始していません)。

これが私のコードです:

var myTextLoader:URLLoader = new URLLoader();
myTextLoader.load(new URLRequest("myText.txt"));

これは私が気づいたことです:

サーバーに接続し、サーバーがファイルの送信をすぐに開始すると、実際のファイル転送中にmyTextLoader.close()を呼び出すと、すぐに中止されます。これは予想されます。FirefoxでSWFを実行し、close()を発行すると、ネットワーク接続が保留から中止に変わることに気付くと、これを監視できます。

ただし、サーバーに接続し、ファイル転送が実際に開始されていない場合(接続イベントが発生し、サーバーがファイルの送信を開始していないことを確認した場合)、myTextLoader.close()は効果がありません。最初のバイトがサーバーから転送され始めた後でのみ、.close()は効果があります。接続がFirebugのPendingでスタックしていることを確認できます。.close()は、転送が開始されるまで効果がありません。

この問題を回避する方法はありますか?.close()を呼び出して、接続ステージに関係なく接続を切断できるようにする必要があります。

4

2 に答える 2

0

私が最初に考えるのは、close()メソッドが呼び出される場所でtrueに設定されるbool「aborted」を作成することです。好き :

function abort():void {
     _aborted = true;
     myTextLoader.close();
}

次に、onProgressイベントまたは同様のイベントの任意の場所でその値を確認し、値がtrueの場合は常にURLLoader close()メソッドを実際に再度呼び出します...

function onProgress(evt:ProgressEvent):void {
     if (_aborted) {
           myTextLoader.close();
     }
}

それはきれいなことではなく、醜い回避策ですが、最初のビットが実際に受信されたときに、すでにそれを閉じたいかどうかがわかるので、これはうまくいく可能性があります。

どこかでバグレポートを見つけましたか?...意図した動作ではないかと思います...

于 2012-10-06T22:55:33.170 に答える
0

サードパーティのAS3HTTPClient(https://github.com/gabriel/as3httpclient)は、close()でこの問題を示さないようです。

于 2012-10-07T08:29:00.410 に答える