Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 10-07-2020
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
hola a todos

en tu código veo varios cosas que te pueden dar erroes:
-pones el BeginUpdate / EndUpdate dentro del hilo y dentro del bucle, por lo que se repite en cada ciclo, cuando solo es necesario hacerlo una vez al principio y al final del proceso.
-Por otra parte, haces un application.ProcessMessages también dentro del hilo... si ya tienes un hilo secundario, el processMessages no es necesario, y de hacerlo hazlo en el hilo principal.

A mi este código me funciona bien:
Código Delphi [-]
procedure TForm2.ShowFiles(LDirs: TStringDynArray);
begin
    // Se pone el listBox en modo Update fuera del hilo
  lboxDirectorio.Items.BeginUpdate;
    // Se crea el hilo de proceso
  with TThread.CreateAnonymousThread(
    procedure
    var
      s: string;
    begin
        //...
      for s in LDirs do
        lboxDirectorio.Items.Add(TPath.GetFileName(s) + CONST_X);
        //...
    end) do begin
      //se marca para que termine de forma automatica
    freeOnTerminate := true;
      //se asigna el proceso que tiene que hacer cuando termine
    OnTerminate := ThreadTerminate;
      // se inicia el hilo
    start;
  end;
end;

procedure TForm2.ThreadTerminate(sender: TObject);
begin
  // al finalizaz el hilo se pone el listBox en modo normal
  lboxDirectorio.Items.EndUpdate;
  SetLength(Files, 0);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  files := TDirectory.GetFiles('c:\a');
  ShowFiles(files);
end;

En este ejemplo en particular no utilizo tthread.Synchronize, a pesar de ser lo recomendable para actualizar un componente visual, pero en este ejemplo en particular solo escribe un único hilo de forma secuencial y no debe de dar problemas. En caso de usar varios hilos para actualizar el componente entonces si es ya necesario.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Arithmetic exception NickName Firebird e Interbase 5 12-12-2022 22:14:12
Llenar listview desde archivo web paquechu FireMonkey 2 13-09-2018 20:15:37
¿Como llenar un listview con datos seleccionados de un DBlookuplistbox? eduarcol OOP 1 11-08-2007 02:47:06
exception arieliten Conexión con bases de datos 3 21-04-2005 00:27:59
Arithmetic Exception NickName Firebird e Interbase 4 13-09-2004 17:00:42


La franja horaria es GMT +2. Ahora son las 14:23:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi