Hola compis. Tengo un componente idftpserver y un lisbox donde pretendo mostrar su estado (conectado, login, etc). Se que no debo meter nada en el lisbox dentro de los metodos del idftpserver porque puedo provocar un "access violation" o algo peor. Necesito sincronizar como se hace en los thread normales pero no veo la forma (ya he buscado en los foros, en la red, en el manual, etc)
He encontrado este codigo pero es de indy 9 y no se como pasarlo a indy 10, vamos que no encuentro el metodo syncronize en el tIdContext o como indicar su thread.
Espero que puedan ayudarme. Gracias
Código Delphi
[-]
uses IdThread;
type
TSrvSynchListBox = class
private
FText: string;
procedure VCLUpdate;
public
procedure Sync(AThread: TIdThread; AMethod: TThreadMethod; s: string);
end;
procedure TSrvSynchListBox.Sync(AThread: TIdThread; AMethod: TThreadMethod; s: string);
begin
FText := s;
AThread.Synchronize(AMethod);
end;
procedure TSrvSynchListBox.VCLUpdate;
begin
TFormFTPServer.LBftpServer.ItemIndex := TFormFTPServer.LBftpServer.Items.Add(FText);
end;
procedure TFormFTPserver.IdFTPServerConnect(AContext: TIdContext);
var
s: string;
begin
s := 'Conectado con ' + AContext.Binding.PeerIP + ':' +
IntToStr(Acontext.Binding.PeerPort);
with TSrvSynchListBox.Create do
try
Sync(AContext, VCLUpdate, s); finally
Free;
end;
end;