Fórum Problema na chamada de Thread #460410

07/11/2013

0

Olá pessoal.

Estou com um problema com a utilização de uma Thread, e gostaria de alguma ajuda, se possível.

Possuo no no sistema em que trabalho um formulário que realiza a leitura de um arquivo de texto e conforme o tipo de registro dentro do arquivo eu o importo para um ClientDataSet diferente. O problema é que essa leitura do arquivo toma alguns 5 ou 6 segundos.

Durante esse período entre a seleção do arquivo e o término do processamento o usuário não tem informação sobre o que está ocorrendo, e eu mesmo acho estranho a tela ficar como se estivesse travada, nesse intervalo, existem outras situações no mesmo formulário em que a tela fica "travada".

Bom, eu criei então um formulário de mensagem, com um gif animado simbolizando o processamento e uma mensagem avisando que está sendo realizado o processamento dos dados. Criei uma Thread dentro da qual eu chamo este formulário de mensagem utilizando o método Synchronize:

    try
        Synchronize(ExibirMensagem);
    finally
        ExitThread(0);
    end;



Criei então uma função para chamar a Thread mostrando a mensagem, segue o corpo da função:

ThdAlerta := ThreadAlertaProcessamento.Create(True);
with ThdAlerta do
begin
    FreeOnTerminate := True;
    Priority        := tpNormal;
    Resume;
end


Então finalmente eu uso essa função no momento em que vou carregar o arquivo, segue o momento do uso da função:

if CarregarExtrato() then
begin
      try
          AvisoProcessamento(True);  // Chama a thread antes de processar os arquivos.
          LerExtrato();
          ProcessarParcelas();
       finally
                AvisoProcessamento(False); //Finaliza a thread com a mensagem.
                HideShowPageControl(False);
       end;
end


O problema é que quando chamo a Thread eu sei que o processamento das linhas subsequentes ocorre imediatamente sem esperar que a mensagem seja exibida. Assim, a mensagem é exibida apenas depois que o processamento do arquivo termina, quando não existe mais nenhuma necessidade que a mesma apareça. Alguém tem alguma ideia de como contornar esse problema e fazer com que o processamento ao código subsequente só seja realizado quando a Thread iniciar o seu processo de exibir a mensagem?

Desde já agradeço a quem puder ajudar.
Thebluemonkey

Thebluemonkey

Responder

Posts

07/11/2013

Gustavo Bretas

TheBlueMonkey, tudo bem? Tente colocar um Application.ProcessMessages entre o AvisoProcessamento(True) e o LerExtrato()

Depois nos diga se deu certo!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar