Delphi – LogEvents e Notificação de Erros ao Usuário em processos paralelos (TThread)

Um boa dor de cabeça é resolver exceções em TThread, TTasks….

Base de Conhecimento
Como pré-requisito é preciso ter em mente (“recomenda-se”) não existir uma exceção não tratada dentro de uma TThread – então todos os processo deveriam tratar as suas exceções internamente com um Try/Exception.

[code]
Try
código com erro…
Except
on e:exception do
fazer algo…
end;
[/code]

 

No framework parte do “post” LogEvents é possível prever o tratamento de exception acrescentando o método RUN…

[code]
procedure TLogListItems.Run(proc: TProc);
begin
TThread.CreateAnonymousThread(
procedure
begin
try
proc;
except
on e: exception do
LogEvents.DoErro(nil, 0, e.message);
end;
end).start;
end;
[/code]

Com método RUN recebendo um ANONIMOUS Procedure – permite que a aplicação faça assim:

[code]
// usado metodo ANONIMOUS para tratar exception internamente
LogEvents.Run(
procedure begin
// código com potencial de exceção

// força um exception
raise Exception.Create(‘Error Message’);
end);

[/code]

Como mostrar o erro ao usuário

O Framework “LogEvents” possui um método de inicialização “register” que o formulário irá se inscrever para receber mensagens… e outro para retirar a inscrição “unregister“.

LogEvents.register(self, DoErro, 0); // recebe os registro de ERROS

onde:

  • self é o formulário que irá recebe mensagens…
  • DoErro é o método do furmulario…
  • e o terceiro parâmetro é um identificador que qualifica o tipo de mensagem que irá receber

O mesmo formulário pode subscrever a receber mais de um tipo de mensagem;

[code]

LogEvents.register(self, DoErro, 0); // recebe os registro de ERROS
LogEvents.register(self, DoSucesso, 1); // registra para receber os sucessos

[/code]

Para não receber mensagens – em geral quando o formulário fecha “close” usar: LogEvents.unregister(self);

Enviando mensagem para o formulário

O método genérico “Log” permite enviar uma mensagem para o identificador “0” (usado no register):

LogEvents.Log(‘Minha mensagem a ser mostrada’);

Para enviar uma mensagem com um identificador específico:

LogEvents.DoErro(nil, 1, ‘LOG…..’);  // register = 1

Código de Exemplo: LogEvents – Mostrando Erros ao usuário

 

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *