TabControl i długa pętla na zdarzeniu OnChange

0

Robię aplikacje na Adroida na zakładkach,
Mam na formie TabControl i na jednej z zakładek jest pętla która wykonuje się kilka sekund (na zdarzeniu TabControl.OnChange)
I wchodzę na tę zakładkę to najpierw wykonuje się ta pętla a dopiero po niej pokazuje się zakładka. A tak nie chcę. Lepiej żeby najpierw pokazać zakładkę i dopiero wykonać pętlę.
Jak można to zrobić inaczej żeby działało tak jak chcę?

0

Najprościej (nie wiem, czy to najlepsze rozwiązanie, czy obejście problemu - ważne, że powinno działać) po otwarciu zakładki uruchom timera, który się wywoła za jakieś 10 czy 50ms. W ten sposób nie blokujesz zakładki czekając, aż się OnChange wykona (bo jedyne działanie w ramach tego zdarzenia do stworzenie timera, co trwa ułamek sekundy), a potem timer się odpali i zapełni zakładkę stosowną treścią (albo wykona inne czasochłonne operacje).

1
procedure TForm4.TabControl1Change(Sender: TObject);
begin
  TThread.CreateAnonymousThread(procedure begin
  //Kod zdarzenia
  end).Start;
end;

albo nawet (nie wiem czy jak zadziała na innych systemach od Windows)

procedure TForm4.TabControl1Change(Sender: TObject);
begin
  Application.ProcessMessages; //wymus przetworzenie kolejki komunikatów (czyli zmiana zakładki)
  //Kod zdarzenia
end;

0

@kAzek: Też myślałem o wątku, ale to wymaga trochę większej wiedzy, bo wątkami można łatwo wdepnąć na minę. Poza tym skoro te obliczenia są wykonywane tylko raz (a przynajmniej ja tak zrozumiałem to, co OP napisał) podczas przełączania karty, osobiście bym nie szedł w kierunku wątków. Co innego, jakby dane obliczenia były wykonywane cały czas, regularnie dostarczając dane do wyświetlenia - wtedy wątek byłby jak najbardziej OK.

1 użytkowników online, w tym zalogowanych: 0, gości: 1