Принудительное обновление экрана для ProgressBar, подключенного к URLLoader или замедление его - PullRequest
1 голос
/ 11 октября 2010

У меня есть ProgressBar в режиме MANUAL, отвечающий на события прогресса URLLoader, которые, кажется, рисуются гораздо реже, чем хотелось бы.Если я отлаживаю приложение, я вижу много событий, запускаемых из URLLoader, но кажется, что ProgressBar перерисовывается с некоторой случайной и медленной скоростью.

Теперь, если бы это был мой собственный код (URLLoader - это черный ящик), я бы делал паузу время от времени, чтобы позволить обновлению пользовательского интерфейса, скажем, через цикл с таймером.Я предполагаю, что сам URLLoader блокирует основной поток от обработки кода чертежа.Добавление validateNow () и invalidateDisplayList (), кажется, не очень помогает.

private function onLoadProgress(resource: TResource, evt: ProgressEvent): void 
{
  _progressDialog.prbCurrentItem.setProgress(evt.bytesLoaded, evt.bytesTotal);
  _progressDialog.prbCurrentItem.validateNow();
  _progressDialog.prbCurrentItem.invalidateDisplayList();
}

Теперь есть много TResources (просто класс, который может управлять своими данными), загружаемые последовательно, но URLLoader настолько жаденчто пользовательский интерфейс не обновляется более нескольких раз при загрузке и обработке (разборе на объекты XML) файлов размером около 10 КБ.Так что подсчет файлов, загруженных визуально, тоже не работает;Мне повезло, что я все время получаю 2-3 обновления экрана.

Загрузка файла размером 700 МБ выглядит намного лучше, но опять-таки обновления индикатора выполнения происходят случайно и медленно.

Кроме того, я 'Я хотел бы знать, есть ли какой-либо способ повлиять или даже контролировать скорость, с которой ProgressEvents запускается классом URLLoader.Я не смог найти, с какой скоростью он обычно отправляет события прогресса;это фиксированный процент на файл или каждые x кадров или миллисекунд?

Поскольку это локальные файлы, было бы лучше, если бы я не использовал класс URLLoader и вместо этого переключился на FileStream?

Среда

  • Flex 4.1.0.16076 SDK
  • Компиляция в приложение AIR
  • FrameRate приложения составляет 60
  • ОС Windows 7x64

Боже мой, выглядел бы сложнее.

  .-'---`-.
,'          `.
|             \
|              \
\           _  \
,\  _    ,'-,/-)\
( * \ \,' ,' ,'-)
 `._,)     -',-')
   \/         ''/
    )        / /
   /       ,'-'

1 Ответ

0 голосов
/ 12 октября 2010

При условии, что у вас есть постоянное соединение, на самом деле удивительно, что прогресс загрузки файла размером 700 МБ точно не отображается в вашем индикаторе выполнения.Вы также утверждаете, что при отладке вы можете видеть, как запускаются события.Это заставило бы меня думать, что проблема на стороне дисплея.Вы предоставили код для прослушивателя прогресса, было бы интересно посмотреть, что код делает в представлении.

Отображение процесса загрузки является довольно распространенной задачей, которая отлично работает во многих приложениях, поэтому, хотя это можетНе исключено, я бы не стал винить URLLoader сразу.Есть ли у вас какие-либо другие процессы, происходящие во время загрузки, какие-либо возможные помехи?

...