0

我的应用程序要求我能够在连接后阶段的任何时候中止/关闭 URLLoader 实例;即无论我是否已经连接并且文件传输已经开始,或者我是否已经连接并且文件传输尚未开始(服务器尚未开始发送文件)。

这是我的代码:

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

这是我注意到的:

当我连接到服务器时,服务器立即开始发送文件,在实际文件传输期间,如果我调用 myTextLoader.close(),它会立即中止。这是意料之中的。我可以通过在 Firefox 中执行 SWF 来监控这一点,并注意到当我发出 close() 时,网络连接从 Pending 变为 aborted。

但是,如果我连接到服务器,并且文件传输实际上还没有开始(我已经确认连接事件已经触发,并且服务器根本没有开始发送文件),那么 myTextLoader.close() 无效。只有在第一个字节开始从服务器传输之后, .close() 才会产生任何影响。我可以验证连接是否卡在 Firebug 中的 Pending 中。.close() 在传输开始之前无效。

任何想法如何解决这个问题?无论连接阶段如何,我都需要能够调用 .close() 并断开连接。

4

2 回答 2

0

我首先想到的是创建一个 bool “aborted”,在调用 close() 方法的地方设置为 true。喜欢 :

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

第 3 方 AS3 HTTPClient (https://github.com/gabriel/as3httpclient) 似乎没有使用 close() 显示此问题。

于 2012-10-07T08:29:00.410 回答