Jump to content

Recommended Posts

Posted

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.

Posted

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.

  • Vote 1
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."

 

Posted
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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.