Problem z długotrwałą operacją i progressem.

0

Cześć, mam klasę, która wykonuje pewną długą operację.

Szkielet wygląda tak:

function JakasFunkcja: boolean;
begin

    for i:=0 to FieldCount - 1 do
    begin
       if Assigned(FOnProgress) then FOnProgress(currTable, i+1, tablesTotal, fieldsTotal);
       application.ProcessMessagess;

       dluga_funkcja;

       for j:=0 to x do
       begin
         //jakieś operacje
         application.ProcessMessages;  
       end;
    end;

end;

Funkcja: dluga_funkcja to długa pętla operująca na TMemoryStream - pierwszym wywołaniem jest oczywiście application.ProcessMessages(w ciele pętli).

Skutkiem jest coś takiego, że jak oprogramuję sobie zdarzenie OnProgress np. tak:

  label1.Caption:=intToStr(currTable);
  label2.Caption:=intToStr(currField);
  application.processMessages; //nie ma różnicy, czy jest, czy nie

label1 jest ok, natomiast w label2, widzę cały czas 1(dopóki nie zmieni się label1, kiedy się zmieni, w label2 widzę 10)

Czyli nie odświeża mi się label2 tak często jak powinien - pomimo użycia application.processMessages w kilku miejscach. Macie jakieś pomysły?

0

A czemu nie w nowym wątku a nie kombinować z application.processmessages

0
.::CYMES::. napisał(a)

A czemu nie w nowym wątku a nie kombinować z application.processmessages

Bo w trakcie tej operacji i tak aplikacja ma być blokowana.
Doszedłem. Dalej jest jeszcze jedna pętla, która blokowała mi to i tam trzeba było dać processMessages.

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