Ver Mensaje Individual
  #1  
Antiguo 10-02-2011
Avatar de eflosten
eflosten eflosten is offline
Miembro
 
Registrado: abr 2010
Posts: 24
Reputación: 0
eflosten Va por buen camino
TIdFTP list dentro de Thread

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 := '*****'; // Esto está con los datos reales obviamente
 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
Responder Con Cita