vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Invoke in einer Klasse funktioniert nicht 
Autor: PeterPan
Datum: 02.08.08 16:58

Hallo zusammen
ich bin gerade bei meiner Projektarbeit und hänge total.
Ich habe vor, einen Lasersensor über RS232 auszulesen.

Die ersten Versuche waren auch erfolgreich. Doch jetzt hänge ich bei dem
Problem mit den unterscheidlichen Threads fest.

Ich habe eine Klasse clsLaser programmiert. Sobalt diese Klasse instanziert wird,
wird der ComPort geöffnet und der Laser ist bereit. ... so weit so gut ...

Um die ausgelesene Daten von der Sub "serial_DataReceived" nutzen zu können muss ich diese irgendwie
vom Workerthread auf den Hauptthread bekommen. Soweit ich das gelesene Verstanden habe, habe ich versucht es umzusetzen. Leider ohne Erfolg.
Mein Ziel war es, bei Ankunft neuer Daten ein Event auszulösen, das im Hauptthread läuft.
Aber leider funktioniert diese , im Projekt auskommentierte, Zeile nicht:
     Me.Invoke(New ValueDelegate(AddressOf xxxx), New Object() {pMaxEdge, _
       pMinEdge})
Hat jemand evtl. einen Tipp für mich?
mfg

Matthias





Public Class clsLaser
    Public WithEvents serial As System.IO.Ports.SerialPort
    Dim readBuffer(36) As Byte
    Dim pMaxEdge As Integer
    Dim pMinEdge As Integer
 
    Private Delegate Sub ValueDelegate(ByVal MaxEdge As Integer, ByVal MinEdge _
      As Integer)
 
    Sub New(ByVal pComPort As String)
        serial = New System.IO.Ports.SerialPort
        serial.PortName = pComPort
        serial.Parity = IO.Ports.Parity.None
        serial.BaudRate = 19200
        serial.WriteBufferSize = 36
        serial.ReadBufferSize = 36
        serial.ReceivedBytesThreshold = 36
        serial.Open()
    End Sub
 
 
    Public Sub ReadEdges()
        serial.Write(Chr(0) & Chr(85) & Chr(0) & Chr(8) & Chr(0) & Chr(0) & Chr( _
          0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & _
          Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) _
          & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr( _
          0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0))
    End Sub
 
    Public Sub LaserReset()
        serial.Write(Chr(0) & Chr(85) & Chr(0) & Chr(11) & Chr(0) & Chr(0) & _
          Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) _
          & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr( _
          0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & _
          Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0))
    End Sub
 
    Private Sub serial_DataReceived(ByVal sender As Object, ByVal e As _
      System.IO.Ports.SerialDataReceivedEventArgs) Handles serial.DataReceived
        serial.Read(readBuffer, 1, 36)
        If readBuffer(4) = 8 Then
            pMaxEdge = ByteToInt(readBuffer(27), readBuffer(28))
            pMinEdge = ByteToInt(readBuffer(29), readBuffer(30))
 
            ' Me.Invoke(New ValueDelegate(AddressOf xxxx), New Object() 
            ' {pMaxEdge, pMinEdge})
        End If
        serial.DiscardInBuffer()
    End Sub
 
    Private Function ByteToInt(ByVal pElement1 As Byte, ByVal pElement2 As _
      Byte) As Integer
        Return (Convert.ToInt32(Hex(pElement1).PadLeft(2, CChar("0")) & (Hex( _
        pElement2).PadLeft(2, CChar("0"))).ToString, 16))
    End Function
 
 
 
    Private Sub xxxx(ByVal MaxEdge As Integer, ByVal MinEdge As Integer)
        RaiseEvent NewEdgeValue(pMaxEdge, pMinEdge)
    End Sub
 
    Event NewEdgeValue(ByVal MaxEdge As Integer, ByVal MinEdge As Integer)
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Invoke in einer Klasse funktioniert nicht815PeterPan02.08.08 16:58

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel