Делал c ENTER_FRAME до этого, но не получилось из-за того, что нужно было второго вызова обработчика дожидаться, а я в первом значение смотрел. Почему второго, честно говоря, я не понял. С EXIT_FRAME тоже самое.

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.utils.Timer;
public class Test extends Sprite
{
public function Test()
{
tf = new TextField();
tf.wordWrap = true;
tf.border = true;
addChild(tf);
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);
urlLoader.load(new URLRequest("1.txt")); // 671*252 bytes
timer = new Timer(100, 1);
timer.addEventListener(TimerEvent.TIMER, timer_timerHandler);
var button:Sprite = new Sprite();
button.graphics.beginFill(0x00FFF0);
button.graphics.drawRect(100, 100, 100, 100);
button.addEventListener(MouseEvent.CLICK, button_clickHandler);
addChild(button);
}
private var urlLoader:URLLoader;
private var tf:TextField;
private var timer:Timer;
private var d:int;
private function enterFrameHandler(event:Event):void
{
trace("enter ", tf.getLineLength(3));
if (++d == 2)
{
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
d = 0;
}
}
private function urlLoader_completeHandler(event:Event):void
{
tf.text = urlLoader.data;
}
private function button_clickHandler(event:MouseEvent):void
{
tf.width = Math.floor(200 * Math.random()) + 10;
trace("button click ", tf.getLineLength(3));
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
timer.start();
}
private function timer_timerHandler(event:TimerEvent):void
{
trace("timer ", tf.getLineLength(3));
}
}
}
Протестировал с довольно большим текстом (600кб). Все работает.

Код:
button click 16
enter 16
enter 2
timer 2