Hallo liebe Archiv-ler,
ich hab da ein für mich recht umfangreiches Problem dessen grund ich trotz stundenlanger rumprobiererei bisher nicht ergründen konnte.
Ich habe mir den Code aus .NET- Tipp 0071 angepasst um Daten über eine USB-Virtuelle RS232 Schnittstelle zu empfangen.
Private Sub myComPort_DataReceived(ByVal sender As Object, ByVal e As _
System.IO.Ports.SerialDataReceivedEventArgs) Handles _
myComPort.DataReceived
Select Case e.EventType
Case IO.Ports.SerialData.Chars
Case IO.Ports.SerialData.Eof
End Select
Dim msg As String = Me.myComPort.ReadExisting
ShowText(msg)
End Sub
Private Sub ShowText(ByVal text As String)
If lblMeldungstext.InvokeRequired Then
Dim d As New TextBoxCallback(AddressOf ShowText)
Me.Invoke(d, New Object() {text})
Else
lblMeldungstext.Text = lbl.Meldungstext.Text & text
End If
End Sub Der Empfang ansich, funktioniert soweit ganz Prima, nun habe ich leider das Problem, dass die Daten nur häppchenweise angezeigt werden, etwa auf diese weise:
Diese Mel
dung ist e
ine Demon
stration
Wenn ich nun in Showtext stehen habe:
lblMeldungstext.Text = lblMeldungstext.Text & text ,
dann wird der Text logischerweise am Stück angezeigt, da ja der Nachfolgende Teil, dem Vorhergehenden angegliedert wird.
Da aber bei Ankunft eines Neuen Datenpakets, der alte Text überschrieben werden soll, muss ich
lblMeldungstext.Text = text schreiben.
Dann Rauschen eben nur, die Einzelnen Teilstrings durch, nur der letzte, wird dann dementsprechen bis zur Auslösung eines neuen DataReceived-ereignisses dauerhaft angezeigt.
Nun habe ich mir eine Art Stringbuilder gebaut:
Private Sub myComPort_DataReceived(ByVal sender As Object, ByVal e As _
System.IO.Ports.SerialDataReceivedEventArgs) Handles _
myComPort.DataReceived
Select Case e.EventType
Case IO.Ports.SerialData.Chars
Case IO.Ports.SerialData.Eof
End Select
Dim msg As String = Me.myComPort.ReadExisting
While (msg.Contains(Chr(0)))
'die nachricht ist komplett
Dim tmp = msg.Substring(0, msg.IndexOf(Chr(0)))
ShowText(msg)
msg = ""
End While
ShowText(msg)
End Sub Da dies aber letztendlich keinen Effekt auf das Verhalten hat, (Leider bin ich mir nicht sicher, ob ein Chr(0) als Endzeichen übertragen wird, oder ob sowas überhaupt übertragen wird), bin ich mir sicher, dass ich da nen Totalen Quark geschrieben hab.
Nun meine Frage, wie könnte ich das ganze anderst, vorallem Zuverlässig schreiben??
Danke schonmal im vorraus,
Gruß
|