Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kartter

Thread

Recommended Posts

pessoal, pq numa thread, qdo mando exibir um showmessage ou um messagedlg, ele exibe de forma incorreta, ou até não exibe.

 

Por exemplo:

procedure TExemploThread.Execute;
var
  cont:integer;
begin
  Try
    cont:=STrToInt('x');
  except on E:Exception do begin
    MessageDlg('erro',mterror,[mbok],0);
  end;
end;
usando o método syncronize, eu consegui exibir. Minha dúvida é a seguinte: eu terei q ter um método syncronize para cada exceção minha?

Exemplo:

procedure TExemploThread.Execute;
var
  cont:integer;
begin
  Try
    cont:=STrToInt('x');
  except on E:Exception do begin
    syncronize(metodoErro);
  end;
end;

procedure TExemploThread.metodoErro
begin
  showmessage('Erro na conversão');
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe, acho que é pq não é o trabalho de uma Thread fazer isso, não em Delphi. Ja tentei fazer isso muitas vezes e não tem como.

Tenta chamar um evento separado do seu objeto, ou mesmo chamar um evento de um formlulário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala kra...

Quando utilizei threads em meus projetos, dei uma pesquisada nesse tipo de coisa e PELO QUE ENTENDI, funciona da seguinte forma:

Para a thread conseguir interagir com os objetos visuais, ela tem q estar rodando em modo síncrono (ou seja, pela rotina syncronize).

 

Uma forma meio que na gambiarra para fazermos isso foi declarar alguns objetos visuais dentro da thread...

Por exemplo: Se eu quero escrever em um memo de dentro da thread, eu crio um atributo "memo : TMemo;"

Ae quando crio a thread eu atribuo um TMemo do meu form principal para esse atributo da thread, assim eu consigo mexer normalmente nele...

Não é nada de boas práticas esse tipo de coisa... rsrsrs

 

 

Não sei se fui claro e se há outras formas de fazer essa interação entre Forms e Threads...

O que o Raficcha disse tem sentido: Não é muito a função da thread interagir com forms de maneira assíncrona...

 

Espero ter ajudado!!

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

: D

 

Você pode tentar fazer isso que o Ispiriquidiberto (nossa que complicado escreve..hehe) disse. Faça assim:

 

Na sessão "Private" da sua thread declare uma variavel "Mensagem":

 

Mensagem: string;

depois crie uma procedure para cincronizar e mostrar a mensagem:

 

procedure MostraMensagem;
 showmessessage(Self.Mensagem)

e na sua execute coloque um valor em "Mensagem" e sincronize a procedure ai de cima

 

 Mensagem := 'Mostrar esta mensagem';
 Synchronize(MostraMensagem);

Acho que assim funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.