SerialPort verwenden

C4Dlooser

Erfahrenes Mitglied
Hi Ihr Alle :)

Ich versuche mittlerweile schon sehr lange (um die vier Wochen) aus einer Hardware die ihren Wert über COM sendet die Daten auszulesen:

Visual Basic:
Public Class Form1

    Dim Port As IO.Ports.SerialPort
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Port = New IO.Ports.SerialPort("COM1", 4800, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
        Port.Open()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = Port.ReadLine.ToString
    End Sub
End Class

Das sind so die Grundpfeiler meiner App. Wenn ich jetzt aber "Button1" drücke hängt er sich komplett auf, Wie
Visual Basic:
Threading.Thread.Sleep(lala)
bei MultiThreading kommt die Fehlermeldung: "Anschluss geschlossen".
Jetzt währen meine Fragen:

1. Gibt es noch Alternativen?
2. Wenn nicht wie kann ich das ganze dann (ohne DirectX) lösen?

Gruß und Vielen Vielen Dank im Vorraus euer C4Dlooser
 
Zuletzt bearbeitet:
MSDN hat gesagt.:
Standardmäßig wird die ReadLine-Methode gesperrt, bis eine Zeile empfangen wird.Wenn Sie dieses Verhalten ändern möchten, legen Sie die ReadTimeout-Eigenschaft auf einen Wert ungleich NULL fest, damit die ReadLine-Methode eine TimeoutException auslöst, wenn am Anschluss keine Zeile verfügbar ist.
Link
Bedeutet:
Die Methode liefert erst dann einen Rückgabewert, wenn das NewLine-Zeichen am Port angekommen ist.
Du kannst aber einfach das DataReceived-Event abonnieren; das tritt immer dann ein, wenn eine bestimmte Anzahl an Zeichen angekommen ist.
DirectX brauchst du nicht.
 
Ja gut,
Aber was mache ich dann mit dem "DataReceived-Event" ?

Gruß C4Dlooser

Edit: Das mit dem "Anschluss-geschlossen" ist immer noch da.
 
Zuletzt bearbeitet:
Na die Daten lesen...
Code:
Private WithEvents Port as IO.Ports.SerialPort
Private Sub Port_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Port.DataReceived
    While Port.BytesToRead > 0
        ' Zeichen lesen
        Label.Text &= CChar(Port.ReadChar)
    Wend
End Sub
 
Zurück