Bueno,no recuerdo exactamente cual es el proyecto que tienes entre manos, pero si te recomendamos que usaras hilos es porque pensamos que era mejor.
No desesperes; Los hilos funcionan y funcionan muy bien, ahora lo que hace falta es que los entiendas y sepas cómo utilizarlos.
Te adjunto un ejemplo con el código que me has pasado (ya que lo has puesto) para que veas como se haría lo mismo con hilos y sin hilos. Es decir,
sin hilos el programa se bloquea, como tú has dicho;
Con hilos no se bloquea.
Revísalo y si quieres sobre ese mismo comentamos lo que quieras.
Tienes que tener en cuenta que desde el hilo
NO PUEDES MODIFICAR DIRECTAMENTE COSAS DE FUERA, para ello debes usar el procedimiento
Synchronize. Por lo demás es sencillo.
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
i:=1;
while (i<10) do begin
i:=i+1;
Edit1.Text := IntToStr(i) + ' de ' + IntToStr(10);
Application.ProcessMessages;
sleep(1000);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Position := ((ProgressBar1.Position + 2) MOD ProgressBar1.Max);
ProgressBar2.Position := ((ProgressBar2.Position + 2) MOD ProgressBar2.Max);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
t:TMyThread;
begin
t := TMyThread.Create(True);
t.edt := Edit2;
t.FreeOnTerminate := True;
t.Resume;
end;
procedure TMyThread.Execute();
begin
inherited;
i:=1;
while (i<10) do begin
i:=i+1;
Synchronize(UpdateEdit);
sleep(1000);
end;
end;
procedure TMyThread.UpdateEdit();
begin
Fedt.Text := IntToStr(i) + ' de ' + IntToStr(10);
end;