Я пишу гибкое приложение, которое очень часто изменяет текстовую область. У меня возникли проблемы с текстовой областью, иногда не отображающей мои модификации.
Следующий код ActionScript иллюстрирует мою проблему:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600">
<mx:TextArea x="82" y="36" width="354" height="291" id="textArea" creationComplete="initApp()"/>
<mx:Script>
<![CDATA[
private var testSentence:String = "The big brown fox jumps over the lazy dog.";
private var testCounter:int = 0;
private function initApp():void {
var timer:Timer = new Timer(10);
timer.addEventListener(TimerEvent.TIMER, playSentence);
timer.start();
}
private function playSentence(event:TimerEvent):void {
textArea.editable = false;
if (testCounter == testSentence.length) {
testCounter = 0;
textArea.text += "\n";
}
else {
textArea.text += testSentence.charAt(testCounter++);
}
textArea.editable = true;
}
]]>
</mx:Script>
</mx:Application>
Когда вы запускаете приведенный выше код в проекте flex, он должен многократно выводить символ за символом фразу «Большая коричневая лиса перепрыгивает через ленивую собаку». Но если вы набираете текстовую область одновременно, вы заметите, что текст, который печатает таймер, искажен.
Мне действительно любопытно, почему это происходит. Однопоточная природа flex и отключение пользовательского ввода для текстовой области, когда я делаю изменения, должны предотвратить это, но по некоторым причинам это, похоже, не работает.
Я также должен отметить, что при работе таймера с большими интервалами (около 100 мс) он, кажется, работает идеально, поэтому я испытываю желание подумать, что это какая-то проблема синхронизации во внутренних компонентах гибкой платформы.
Есть идеи о том, что может быть причиной проблемы?