Buenos dias delphinianos, os traigo una duda que ni San Google ni el buscador de estos foros me ha conseguido resolver.
Tengo un TThread, que alberga un IdFTP, al que llamo desde el hilo principal para hacer un List de los archivos remotos. El problema surge en que, al hacer el List, me da un error de Access Violation, el cual haciendo el mismo proceso desde el main thread no me salta, pero no consigo averiguar por qué / como solucionarlo.
Ahi va el código:
La llamada:
Código Delphi
[-]
HiloFTP:=THiloFTP.CreateLista(SlVersionesDescargables,lblProgDescarga);
HiloFTP.execute;
El create del hilo:
Código Delphi
[-]
constructor THiloFTP.CreateLista(lista: TStringList; labelProceso: Tlabel);
begin
inherited Create(false);
Self.FTP:=TIdFTP.Create(nil);
Self.FTP.OnWork :=FTPWork;
Self.FTP.Username := '*****'; Self.FTP.Password := '*****';
Self.FTP.Host := 'ftp.mihost.es';
Self.lblProgreso:=labelProceso;
Self.listaArchivos:= lista;
Self.RutaRemota:=carpeta;
Self.modo:='LISTA';
end;
El proceso que trabaja realmente. Se le llama desde el Execute según el modo
(intento aprovechar el mismo hilo para hacer descargas en otro punto del programa, para eso el modo y el create sobreescrito)
Código Delphi
[-]
procedure THiloFTP.ListarArchivos;
begin
try
listaArchivos.Clear;
if lblProgreso <> nil then lblProgreso.caption:='Conectando...';
FTP.Connect;
if lblProgreso <> nil then lblProgreso.caption:='Conectado.';
if lblProgreso <> nil then lblProgreso.caption:='Buscando archivos';
FTP.List(ListaArchivos,'',false); // <-- Aqui es donde da el Access Violation
if lblProgreso <> nil then lblProgreso.caption:='Desconectando...';
FTP.Disconnect;
if lblProgreso <> nil then lblProgreso.caption:='Desconectado.';
finally
if FTP.connected then FTP.Disconnect;
end;
end;
Cabe destacar que es mi segundo TThread, aún estoy aprendiendo a manejarlos y es probable que tenga algo mal planteado y no me de cuenta.
Un saludo, y gracias de "hantevraso" por vuestra ayuda