Rodrigo Samuro Posted June 16, 2018 at 12:57 PM Report #611000 Posted June 16, 2018 at 12:57 PM Bom dia, Criei um código em VB.NET que faz a leitura de uma porta serial de uma balança, utilizei 2 Threads para enviar tudo para um Richtextbox. O código funciona perfeitamente, recebe os dados da porta serial, manipula certinho, o problema é que ele fica "travando"... Consigo ver que está travando no momento em que vou arrastar o formulário ou quando posiciono o cursor em cima dos botões, pois percebo que existe um delay no Hover. O código é o seguinte: Public Class Form1 Private trd As Thread Private trd2 As Thread Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load trd = New Thread(AddressOf ThreadTask) trd.IsBackground = True trd.Start() trd2 = New Thread(AddressOf ThreadTask2) trd2.IsBackground = True trd2.Start() End Sub Private Sub ThreadTask2(ByVal [text] As String) 'input from ReadExisting Try If Me.RichTextBox1.InvokeRequired Then Dim x As New SetTextCallback(AddressOf ThreadTask2) Me.Invoke(x, New Object() {(text)}) Else _SerialPort1.NewLine = Chr(13) ' Me.RichTextBox1.Text = _SerialPort1.ReadLine() End If Catch ex As Exception End Try End Sub Private Sub ThreadTask() Handles SerialPort1.DataReceived Try ThreadTask2(SerialPort1.ReadExisting()) Catch ex As Exception End Try End Sub Alguém saberia, por gentileza me dar uma luz para que eu possa identificar qual o erro que estou cometendo? Desde já agradeço muito. Att.
M6 Posted June 18, 2018 at 08:44 AM Report #611007 Posted June 18, 2018 at 08:44 AM Não percebo porque tens duas threads. Podes ter apenas uma thread, que recebe a RichTextBox1 como argumento (só depois de ter sido criada, atenção aos ciclos de vida), e sempre que recebe informação da porta, adiciona a informação à RichTextBox1. Já agora, se estás a fazer um try/catch, podias fazer log das excepções, tipicamente é útil quando acontecem problemas. 1 Report 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
Rodrigo Samuro Posted June 20, 2018 at 11:31 AM Author Report #611045 Posted June 20, 2018 at 11:31 AM Em 18/06/2018 às 05:44, M6 disse: Não percebo porque tens duas threads. Podes ter apenas uma thread, que recebe a RichTextBox1 como argumento (só depois de ter sido criada, atenção aos ciclos de vida), e sempre que recebe informação da porta, adiciona a informação à RichTextBox1. Já agora, se estás a fazer um try/catch, podias fazer log das excepções, tipicamente é útil quando acontecem problemas. Obrigado pela resposta, M6 Realmente, eu estava cometendo erros ao utilizar 2 threads. Ao invés disto, utilizei DELEGATE e o formulário agora trabalha sem travar.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now