Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TAniIndicator] Почему замораживается TAniIndicator при выполнении запроса к базе данных?


ivadimos

Вопрос

Запускаю отрисовку компонентов, данные для которых берутся из базы - занимает некоторый промежуток времени(1-3сек).
В это время я запускаю анимацию компонента aniIndicator, однако он не крутится. Проблема в неправильном использовании потоков.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Индикатор не будет крутиться, Так как вы блокируете основной поток своей работой с БД. Решение дано в теме:

Ссылка на комментарий
  • 0

данные загружаются в отдельном потоке?

 

Btn := (Sender as TConfirmButton);

  TThread.Synchronize(nil, procedure
  begin
    ShowLoad;
  end);

  TTask.Run(
  procedure
  begin
    TThread.Synchronize(nil, procedure
    begin
      case Btn.Id of
        BACK_TO_MENU_TYPES: Self.ShowMenuTypes;
        BACK_TO_MENU: Self.LoadMenu(Global.CURRENT_MENU);
        BACK_TO_PREV_FOLDER: Self.OpenMenuFolder(Btn.OpenFolder);
        OPEN_MENU: Self.LoadMenu(Btn.OpenFolder);
        OPEN_FOLDER: Self.OpenMenuFolder(Btn.OpenFolder);
        OPEN_TRADE_POSITION: Self.OpenTradePosition(Btn);
      end;
    end);

    TThread.Synchronize(nil, procedure
    begin
      HideLoad;
    end);
  end);

ShowLoad, HideLoad - изменяю visible layout'a с индикатором.

Внутри процедур потоков нет. 

 

Ссылка на комментарий
  • 0
  • Модераторы
ShowLoad;

TTask.Run(
  procedure
  begin
    case Btn.Id of
      BACK_TO_MENU_TYPES: Self.ShowMenuTypes;
      BACK_TO_MENU: Self.LoadMenu(Global.CURRENT_MENU);
      BACK_TO_PREV_FOLDER: Self.OpenMenuFolder(Btn.OpenFolder);
      OPEN_MENU: Self.LoadMenu(Btn.OpenFolder);
      OPEN_FOLDER: Self.OpenMenuFolder(Btn.OpenFolder);
      OPEN_TRADE_POSITION: Self.OpenTradePosition(Btn);
    end;

    TThread.Synchronize(nil, procedure
      begin
        // тут разбираем даные пришедшие с БД
        HideLoad;
      end);
end);

я правда не понимаю что происходит в этих процедурах, но там должно быть только получение данных. т.е. выполниться сам запрос в БД.

а отрисовка/работа с визуальными компонентами должна произойти в этом блоке

    TThread.Synchronize(nil, procedure
      begin
        // тут разбираем даные пришедшие с БД
        HideLoad;
      end);
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...