TAnimate - Trava ao executar uma operação

Delphi

18/11/2005

Salve!!!

Tenho uma rotina para envio de email usando o indy + delphi7, O envio de email esta funcionando normal o meu problema é que quando mando enviar o email .... a animação do componente TAnimate para .... ela simplesmente trava, fica parada até que o email seja enviado .... depois ela volta a funcionar. Já tentei fazer assim:

Application.ProcessMessages; smtp.Connect; try smtp.Send( mensagem ); FreeAndNil( newText ); FreeAndNil( newAttach ); smtp.Disconnect; except on e : Exception do MessageDlg( ´Erro ao tentar enviar o email. :´ + e.Message, mtInformation, [mbOK], 0 ); end;


Mas nao resolveu, continua travando o TAnimate.

alguem sabe o que posso fazer para resolver???

valewsss


Mmoreira

Mmoreira

Curtidas 0

Respostas

Massuda

Massuda

18/11/2005

Se o ´smtp´ em seu código for um TIdSMTP do Indy, coloque também no form um componente TIdAntiFreeze (normalmente na aba Indy Misc).


GOSTEI 0
Michael

Michael

18/11/2005

Olá!

[b:ebf9204839]ProcessMessages [/b:ebf9204839]não funciona neste caso pq o lag está no método [b:ebf9204839]Send[/b:ebf9204839]. A solução seria enviar o email de dentro de uma thread.

[]´s


GOSTEI 0
Mmoreira

Mmoreira

18/11/2005

Massuda,

Eu coloquei o TIdAntiFreeze e nao adiantou muito, a animação continua travando ....



Michel,

Bom eu nao saco nada de thread, vou dar uma pesquisada no forum e ver o que consigo ...


valews


GOSTEI 0
Massuda

Massuda

18/11/2005

Eu coloquei o TIdAntiFreeze e nao adiantou muito...
Você tem algum processamento adicional sendo feito durante o envio do email (por exemplo, barra de progresso)?


GOSTEI 0
Martins

Martins

18/11/2005

Olá! [b:0314e39111]ProcessMessages [/b:0314e39111]não funciona neste caso pq o lag está no método [b:0314e39111]Send[/b:0314e39111]. A solução seria enviar o email de dentro de uma thread. []´s


Concordo com vc garotinho...

  TMailThread = class( TThread )
  protected
     procedure Execute; override;
  end;

.....

procedure TMailThread.Execute;
begin

{Seus códigos.... }
.....

end;


Depois vc faz a chamada a sua Thread.

Michael passa no fórum do ArapuKa.

Um Abraço


GOSTEI 0
Mmoreira

Mmoreira

18/11/2005

Massuda

Eu nao tenho nenhum outro processo junto com:

try
smtp.Send( mensagem );


Um pouco antes de enviar o email eu abro um ClientDataSet com poucos registros.

Martins,
Estou dando uma estudada sobre thread ...

Tenho que resolver isso o quanto antes.

valews


GOSTEI 0
POSTAR