Program się "przywiesza" przy pętlach

0

Mam mały kłopot z pętlą pobierającą pliki, otóż poniższy kod co prawda działa poprawnie, ale przy próbie przesunięcia okna aplikacji, program się przywiesza i nie bardzo wiem, co mógłbym zrobić, aby pętla się wykonywała, a sam program nie przywieszał, kiedy pętla jest wykonywana.

   fileList:=TStringList.Create;
   try
    FileList.LoadFromFile('data\files.txt');
      try
      
        j := FileList.Count-1;

        
        ProgressBar1.Max := round(j);
        ProgressBar1.Position := 0;

        
        i:=0;
          repeat

           
            if isCancel = true then
              break
            else

            i:=i+1;
            perc := (i / j)*100;
            ProgressBar1.Position := i;
            Form1.Refresh;
            Label2.Caption := 'Ogólny postęp: '+ IntToStr(ceil(perc)) + '%';
            Download(FileList.Strings[i]); { * Poniżej kod funkcji * }

          until (i = j) or (isCancel = true);
          
          FileList.Free;

        
        except on e:Exception do Application.MessageBox(PChar(e.Message),'Application Error',MB_OK);
      end;
    except on e:Exception do Application.MessageBox(PChar(e.Message),'Application Error',MB_OK);
   end;

A tak pobieram plik...

function Download(item_file:string):string;
begin
with TDownloadUrl.Create(nil) do
  try
    url := 'http://mojadomena.pl/pliki/'+item_file;
    filename := ExtractFilePath(Application.ExeName)+item_file;
    Form1.Label1.Caption := 'Pobieram plik: '+ item_file;
    Form1.Refresh;
    ExecuteTarget(nil);
  finally
  free;

end;
1
Application.ProcessMessages
0

Dziękuję :] Bardzo mi to pomogło.

2

Takie problemy rozwiązuje się umieszczając "problematyczny" kod w osobnym wątku a nie sztukując poprzez Application.Processmessages

0

Tym bardziej, że kolejka komunikatów odblokowywana będzie zawsze po ukończeniu pobierania pliku (jeśli w tym miejscu wywoła się sugerowaną metodę), więc przy pobieraniu większych plików lub spadku prędkości pobierania, program i tak będzie zamarzał.

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