Alle Daten empfangen ??? EoF

  • VB.NET
  • .NET (FX) 4.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Alle Daten empfangen ??? EoF

    Hallo ich will über das COMPort.DataReceived Event alle Daten empfangen. Mache dass so:

    VB.NET-Quellcode

    1. Private Sub Receiver(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles COMPort.DataReceived
    2. Dim RXByte As Byte
    3. Do
    4. RXCnt = 0
    5. Do
    6. RXByte = CByte(COMPort.ReadByte)
    7. RXArray(RXCnt) = LookUpTable(RXByte >> 4)
    8. RXCnt = RXCnt + 1
    9. RXArray(RXCnt) = LookUpTable(RXByte And 15)
    10. RXCnt = RXCnt + 1
    11. RXArray(RXCnt) = CChar(" ")
    12. RXCnt = RXCnt + 1
    13. Loop Until (COMPort.BytesToRead = 0)
    14. Me.Invoke(New MethodInvoker(AddressOf Display))
    15. Loop Until (COMPort.BytesToRead = 0)


    Dass Problem ist ja dass ich nicht immer weis wie lang sind die Daten.

    Wenn man das IO.Ports.SerialData.Eof Event benutz zum Beispiel:

    VB.NET-Quellcode

    1. If e.EventType = IO.Ports.SerialData.Eof Then
    2. 'alle Daten da :-)
    3. ElseIf e.EventType = IO.Ports.SerialData.Chars Then
    4. 'noch warten
    5. End If


    Ist man dann sicher dass alle Daten empfangen wurden ? Bis jetzt habe ich immer 100ms gewartet und dann die Abrage gemacht. ReceivedBytesThreshold =1
    Kommt immer wen alle Daten im Puffer das EOF ?

    zoranmaric schrieb:

    alle Daten empfangen
    Frage das Port, wieviele Bytes im Puffer sind:

    VB.NET-Quellcode

    1. Dim number = Me.SerialPort1.BytesToRead
    Und:
    Das Auslesen geht sehr viel schneller als das Empfangen. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @zoranmaric Dimensioniere Dir in der Prozedur DataReceived ein Byte-Array der Anzahl Me.SerialPort1.BytesToRead, pack alle gelesenen Bytes da rein und verarbeite sie.
    Wenn weitere Bytes kommen, wird wieder ein DataReceived-Event ausgelöst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!