ciao a tutti.
avrei bisogno di un aiuto su questo progettino in Visual Basic.net che ho fatto.
vi spiego un attimino come funziona.

l' obbiettivo è quello di rilevare la misura che mi da lo strumento tramite l' interfaccia RS232.
questa operazione mi riesce bene, ma non riesco a capire come poter contare le misure nell'arco di 1 secondo.

praticamente le misure le rilevo e infatti le stampo in una textbox, ma mi manca il fatto di contarlo nell ' arco di un secondo.
se vedete c' è il ciclo per rilevare le misure

grazie in anticipo

vi post il codice:

UTILIZZO DEI THREAD:
codice:
Public Class ProvaThread

    'variabile del ciclo continuo del Thread
    Private CicloThread As Boolean = False

    'dichiaro la classe thread che andrò a gestire --> thread principale di sistema
    Private Thread_Di_Sistema As System.Threading.Thread

    'dichiaro una variabile in cui memorizzo lo stato del thread
    Public StatoThread As Boolean = False

    'dichiaro una variabile buffer dove andrò a memorizzare i dati che ricevo dalla porta seriale
    Private buffer As String = ""

    'dichiaro una variabile valore dove andrò a memorizzare la misura
    Public valore As Double = 0

    'dichiaro una variabile StatoConnessione per verificare se la connessione con lo strumenta e aperta o meno 
    Public StatoConnessione As Boolean = False

    'creo la classe ce andrà a gestire la porta seriale DMX-1
    Private PortaComDMX As IO.Ports.SerialPort

    Public Sub PRINCIPALE_THREAD() 'thread che gestisce l'apertura della porta COM1

        'richiamo la classe a cui andrò a associare tutti i valori della porta seriale
        PortaComDMX = New IO.Ports.SerialPort

        'verifichiamo che non si siano problemi
        Try
            'imposto le caratteristiche che voglio della porta seriale
            PortaComDMX.PortName = "COM1"
            PortaComDMX.BaudRate = 9600
            PortaComDMX.DataBits = 8
            PortaComDMX.Parity = IO.Ports.Parity.None
            PortaComDMX.StopBits = IO.Ports.StopBits.One
            PortaComDMX.ReadTimeout = 10000
            PortaComDMX.WriteTimeout = 10000
            PortaComDMX.DtrEnable = True
            PortaComDMX.RtsEnable = True
            PortaComDMX.ReceivedBytesThreshold = 1
            PortaComDMX.Handshake = IO.Ports.Handshake.None

            'dopo di che apro la porta
            PortaComDMX.Open()


            'pulisco i buffer di memoria per evitare che rimanga qualcosa salvato in memoria
            PortaComDMX.DiscardInBuffer()
            PortaComDMX.DiscardOutBuffer()

        Catch ex As Exception

            'scrivo errore
            MsgBox("Errore Apertura Porta : " + ex.Message)

        End Try

        StatoThread = True
        StatoConnessione = True
        ' imposto un tempo di attesa per dare tempo al thread di eseguire il ciclo do
        Threading.Thread.Sleep(500)

            Do
                Try

                'invio 1 + lo spazio alla porta seriale come richiede lo strumento
                PortaComDMX.Write("1" + vbCr)
                Do

                    'eseguo il controllo per capire se effettivamente lo strumento mi risponde
                    If PortaComDMX.BytesToRead > 0 Then

                        'se ci sono dati carico tutto nella variabile buffer
                        buffer &= PortaComDMX.ReadExisting


                    End If

                    'do un tempo di attesa per fare in modo che il thread risponda bene
                    Threading.Thread.Sleep(2)

                    'il ciclo continua fino a quando nella variabile buffer non compare il ritorno a capo
                Loop While buffer.Contains(vbCr) = False

                'utilizzo la funzione replace per fare in modo di eliminare la stringa 010 davanti alla misura
                buffer = buffer.Replace("01A", "")

                'converto la stringa in double e assegno tutto ciò che c'è nel buffer a valore
                Double.TryParse(buffer, valore)

                'a questo punto posso svuotare il buffer
                buffer = ""

            Catch ex As Exception

                MsgBox("Errore : " + ex.Message)

            End Try

                'funzione per fare in modo che il thread lavori correttamente (tempo di attesa)
            Threading.Thread.Sleep(1)
                'la lettura dei valori continua fino a quando il ciclo non diventa FALSE premendo il pulsante STOP
            Loop While CicloThread = True

            'chiudo la porta per evitare che rimanga appesa 
            PortaComDMX.Close()

            'imposto questa variabile False in modo da poter concludere la sub StopThread ed eseguire il comando Abort
            StatoThread = False
        StatoConnessione = False

    End Sub

#Region "INIZIO E FINE THREAD"

    Public Sub INIZIO_THREAD() 'Thread di Start

        'esecuzione del thread di inizio. (faccio partire il thread)
        'durante l' esecuzione chiedo che il tutto venga indirizzato al PRINCIPALE_THREAD
        'per poter aprire la porta COM1
        CicloThread = True
        Thread_Di_Sistema = New System.Threading.Thread(AddressOf PRINCIPALE_THREAD)
        Thread_Di_Sistema.Start()


    End Sub


    Public Sub FINE_THREAD() 'Thread di fine
        CicloThread = False

        Do
            'imposto un tempo di attesa di mezzo secondo
            Threading.Thread.Sleep(500)

        Loop While StatoThread = True
        'blocco il thread per consentire la chiusura 
        Thread_Di_Sistema.Abort()

    End Sub

#End Region

End Class
codice:
Public Class Form1

    'CollegamentoThread è la variabile di collegamento tra il Form e la classe thread
    Private CollegamentoThread As ProvaThread = New ProvaThread


    Private Sub ApriPorta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ApriPorta.Click

        'tramite la variabile CollegamentoThread richiamo il thread INIZIO_THREAD per far partire il tutto
        CollegamentoThread.INIZIO_THREAD()

    End Sub

    Private Sub ChiudiPorta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChiudiPorta.Click

        'tramite la variabile CollegamentoThread richiamo il thread FINE_THREAD per terminare il tutto
        CollegamentoThread.FINE_THREAD()

    End Sub

    Private Sub AggiornaDati_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AggiornaDati.Tick

        'se lo stato del thread è uguale a true allora prendo i dati dello strumento e li scrivo sulla casella di testo 
        If CollegamentoThread.StatoThread = True Then

            Me.TextBoxMisuraDMX.Text = FormatNumber(CollegamentoThread.valore, 3)
            Me.TextBoxFineValore.Text = ""
            Me.TextBoxStatoConnessione.BackColor = Color.Lime

        Else
            'altrimenti non sto acquisendo dati e quindi chiudo la porta
            Me.TextBoxMisuraDMX.Text = ""
            Me.TextBoxFineValore.Text = "La porta è chiusa"
            Me.TextBoxStatoConnessione.BackColor = Color.Red
           
        End If

        If CollegamentoThread.valore = 911 Then

            'verifico che se lo strumento e spento o collegato coloro la casella di blu
            Me.TextBoxStatoConnessione.BackColor = Color.Blue
            Me.TextBoxMisuraDMX.Text = ""

        End If

    End Sub

End Class