1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

HELP com threads no VB2008

Discussão em 'Programação' iniciada por pee2002, 21 de Dezembro de 2008. (Respostas: 3; Visualizações: 569)

  1. pee2002

    pee2002 Power Member

    Estou com um grave problema no meu código da faculdade e gostaria que alguém me ajudasse :(

    É assim: Eu tenho que desenvolver uma aplicação que comunica com um automato atraves do protocolo hostlink da OMRON. Até aqui tudo bem, o programa esta a comunicar e por ai fora. Mas acontece que umas das funcionalidades é de supervisão e para isso eu preciso de estar por exemplo de 3 em 3 segundos a comunicar com o automato. Isso implica o uso do Sleep(250) e como já estão a ver o meu programa de 3 em 3 segundos tem um "freeze" de 250ms. O que é aborrecido.

    A ideia seria converter a minha função:

    Código:
    Public Function ComunicaAutomato(ByVal trama As String) As String
    
            Dim tramaDEresposta As String = ""
            Try
                Form.SerialPort.Open()
                Form.SerialPort.Write(trama)
                [SIZE="4"][B]System.Threading.Thread.Sleep(250)[/B][/SIZE]
                tramaDEresposta = Form.SerialPort.ReadExisting
            Catch ex As Exception
                FormSupervisao.TimerRefresh.Stop()
                MessageBox.Show(ex.Message & vbCrLf & "Comunicações Paradas!", "Erro de Comunicação", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
            Form.SerialPort.Close()
    
            Return tramaDEresposta
    End Function
    Numa thread à parte para que o "freeze" não ocorra.

    Alguem sabe como o fazer?

    Obrigado
     
  2. AwakE

    AwakE Banido

    Em C# isto cria uma nova thread que corre a routina "ThreadJob". A questão é que deves querer por as duas threads a comunicar e aí já é mais complicado. Não sou propriamente perito nisso.
     
    Última edição: 21 de Dezembro de 2008
  3. pee2002

    pee2002 Power Member

    Pois.. o problema é que eu tenho argumentos e retorno uma String. A string de Resposta :(
     
  4. pee2002

    pee2002 Power Member

    Penso que já resolvi o problema com este exemplo que criei.

    Espero que ajude os próximos a ter esta dúvida.

    Classe "FillClass"

    Código:
    Public Class FillClass
        Private intValue As Integer
        Private intReturn(99) As Integer
        Private intMultiplier As Integer
    
        Public Event Done(ByVal intReturn() As Integer)
        Public WriteOnly Property Value()
            Set(ByVal Value)
                intValue = Value
            End Set
        End Property
        Public WriteOnly Property Multiplier()
            Set(ByVal value)
                intMultiplier = value
            End Set
        End Property
        Public Sub Fill()
            Dim i As Integer
            Dim current As Integer
    
            current = intValue
            For i = 0 To 10
                intReturn(i) = current
                current *= intMultiplier
            Next
            RaiseEvent Done(intReturn)
        End Sub
        Sub SquareEventHandler(ByVal Square() As Integer) Handles Me.Done
            MessageBox.Show("The square is " & Square.ToString)
        End Sub
    End Class
    Form1:

    Código:
    Imports System.Threading
    
    Public Class Form1
        Dim WithEvents oSquare As FillClass
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim oThread As System.Threading.Thread
            Dim oFill As New FillClass
    
            oThread = New Thread(AddressOf oFill.Fill)
    
            oFill.Value = 3
            oFill.Multiplier = 2
            oThread.Start()
        End Sub
    
    End Class
     

Partilhar esta Página