Firemonkey iPad ждет значок

У меня есть две вкладки в моем приложении. У них обоих есть таблица - одна для ввода и одна для вывода. Когда вкладка для выходной таблицы активирована, запускается процесс, который анализирует данные и заполняет выходную сетку.

Выходная сетка занимает несколько секунд для рендеринга, и я хотел бы отобразить анимированный значок. Я попробовал TImage с анимацией TFloat, а также TAniIndicator. Кажется, что они оба замирают, пока идет процесс анализа.

1 ответ

Решение

Похоже, у вас есть однопоточное приложение. Проблема в том, что один поток может выполнять одну "задачу" за раз.

В случае однопоточных приложений основной поток отвечает за несколько вещей:

  • обработка пользовательского интерфейса (обновление, рисование и т. д.)
  • выполнить ваш код, т.е. реагировать на события элемента управления, такие как TabXActivate()
  • и т.п.

Поэтому, когда вы выполняете свою функцию Analyze(), основной поток блокируется и, следовательно, не может обновить пользовательский интерфейс. Как побочный эффект Анимации, кажется, зависают.

Я бы предложил перенести долгосрочные задачи в отдельные темы. После того, как задача выполнена, подайте сигнал главному потоку, чтобы остановить индикатор и продолжить получать пользовательский ввод. Таким образом, основной поток IU не будет заблокирован, и TAniIndicator будет работать правильно.

NB: Остерегайтесь синхронизации потоков и безопасности потоков! Компоненты VCL/FMX НЕ являются потокобезопасными. Вы можете найти полезную информацию здесь:

Другие вопросы по тегам