Sistema PDV em VB.NET com conflitos de threads

Olá pessoal, sou novo aqui e meio novato em .NET. Peguei um sistema de automação comercial (PDV.exe em VB, Emissor.exe em C# e Retaguarda.exe em VB). Acontece que o PDV conversa com o Emissor através de arquivo TXT para emitir NFC-e e NF-e, mas após algum tempo de uso do pdv, ele simplesmente trava e fecha, e ao depurar não encontro nada que indique o erro, apenas a imagem abaixo que fala sobre threads executaram código externo.

Gostaria de saber o que pode estar acontecendo, ou qual o caminho devo tomar para identificar o problema, pois não entendo muito sobre threads em .NET. Se alguém puder indicar algo, agradeço!

Abaixo do botão continuar do Debug, tem um dropdown para você escolher a thread. Exemplo:

Na Thread correta, ele exibe aonde a exceção foi gerada.

Se eu alterar a Thread, é exibida a mesma tela que você informou:

1 curtida

@gbuenoo, interessante… n tinha reparado nessas funções. Observei ao sellecionar outra Thread onde o sistema parou, foi em um MessageBox, e sintaxicamente tudo ok, mas encontrei a frase “Não é possível avaliar a expressão porque um quadro nativo está no alto da pilha de chamada.”

Dei uma pesquisada e não encontrei muita coisa sobre, pode ajudar ?!

1 curtida

Deivid, tente o seguinte:

No menu superior, selecione: Depurar > Janelas > Pilha de Chamadas

Na parte inferior do VS, irá aparecer a opção Pilha de Chamadas

Se clicar com o botão direito no quadro de Pilha de Chamadas, você poderá selecionar alguns filtros também.

Veja se isso ajuda em algo.

1 curtida

@gbuenoo fiz o que você falou… o erro aconteceu novamente, mas agora em um local diferente do código, conforme a imagem:

Acredito que exista algum problema com a versão da DLL do banco de dados local (Firebird) que utilizo, mas n sei ao certo.

Na outra thread, localizei através da pilha de chamadas alguns outros detalhes que seguem na imagem abaixo:

Obs: o Select em que o sistema travou, se trata de um valor null retornado na consulta (em um FbCommand), que não está dentro de um try catch, porém ele é verificado antes de ser atribuído a ao textBox, será esse o erro que causa a parada do sistema?

Agradeço desde já as dicas! :wink:

De cara, eu circundaria todas essas consultas em banco de dados com um Try/Catch. Assim evitaria uma parada inesperada do sistema, o usuário não iria se desesperar e você poderia gerar um arquivo de log detalhando oq aconteceu.

Aparentemente, essa exception é causada pq sua consulta ao banco retorna null e você chama o método ToString() para executar a formatação do texto.

Sugiro que:

  1. Coloque todo bloco de código que dependa de elementos externos a sua aplicação, dentro de um Try/Catch. Isso inclui, acesso a arquivos de texto, consulta/insert/update em banco de dados, chamadas de api’s, etc.
  2. Ao fazer uma consulta, que você precisará formatar o texto retornado por ela, faça uma verificação se o valor retornado não foi nulo(Se houver alguma outra validação que se aplique, pode incluir também).

É realmente o melhor a se fazer. Peguei o sistema em funcionamento já, tem bastante coisa pra tratar, mas só assim pra evitar esses problemas. Agradeço a ajuda, muito obrigado @gbuenoo , vou fazer as correções que preciso. Abrass! :wink:

1 curtida