Ciao,
Come riferimento la wiki di embarcadero
http://docwiki.embarcadero.com/RADStudio/Seattle/en/Using_the_Parallel_Programming_Library oppure puoi cercare sul sito di Marco Cantù .
Per quanto riguarda il tuo problema io userei un TTask, qualcosa del tipo:
NB: scritto al volo non testato è solo x dare un idea
procedure TForm1.LBsincronizzaClick(Sender: TObject);
begin
TTask.run( procedure
var
username : string;
password : string;
host : string;
text : string;
text2 : string;
artico : string;
anagra : string;
fileOr : string;
busOrd : string;
begin
artico := TPath.GetDocumentsPath + PathDelim +'artico.csv';
anagra := TPath.GetDocumentsPath + PathDelim +'anagra.csv';
fileOr := TPath.GetDocumentsPath + PathDelim +'Ordini.csv';
busOrd := TPath.GetDocumentsPath + PathDelim +'busOrd.csv';
//connessione al server ftp -----------------------------------------------
IdFTP1.Host := '192.168.1.217';
IdFTP1.Username := FDQueryINSERT.FieldByName('username').AsString;
IdFTP1.Password := FDQueryINSERT.FieldByName('password').AsString;
IdFtp1.Passive := False;
IdFtp1.ConnectTimeout := 1000;
if (IdFtp1.Connected = False) then idFtp1.Connect();
IdFtp1.BeginWork(wmRead);
IdFTP1.ChangeDir( '/' );
if FileExists(artico) then DeleteFile(artico);
if FileExists(anagra) then DeleteFile(anagra);
if FileExists(fileOr) then DeleteFile(fileOr);
if FileExists(busOrd) then DeleteFile(busOrd);
IdFTP1.Get( 'Artico.csv', artico, False );
IdFTP1.Get( 'Anagra.csv', anagra, False );
IdFtp1.EndWork(wmRead);
IdFtp1.Disconnect();
end);
end;
il tutto in una task unica ma puoi dividere le varie operazioni in più task e farle eseguire in parallelo, nella wiki di embarcadero trovi qualche info.
Poi se c'e' qualcuno che ci capisce di più e può darti più info .... ben venga.