Получение строки с последовательного устройства. Как его разделить
Привет всем!! У меня есть последовательное устройство, которое посылает мне строковые данные со скоростью 38400, и эти данные выглядят так:"? @D00014C000 000". Поэтому я пытаюсь использовать некоторые символы из строки в списке. Например, я хочу, чтобы символы "14C" появлялись в списке. Я попробовал функцию mid, но получил ошибку (сообщение=Операция Кросс-потока недопустима: управление 'ListBox3' доступно из потока, отличного от потока, в котором оно было создано.) . вот мой код. Какие-нибудь сиггестии, пожалуйста?? Даже если это работает иногда listbox lidnt работает должным образом и теряет символы
Что я уже пробовал:
<pre>Imports System Imports System.ComponentModel Imports System.Threading Imports System.IO.Ports Public Class frmMain Dim myPort As Array Delegate Sub SetTextCallback(ByVal [text] As String) 'Page Load Code Starts Here.... Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load myPort = IO.Ports.SerialPort.GetPortNames() cmbBaud.Items.Add(9600) cmbBaud.Items.Add(19200) cmbBaud.Items.Add(38400) cmbBaud.Items.Add(57600) cmbBaud.Items.Add(115200) For i = 0 To UBound(myPort) cmbPort.Items.Add(myPort(i)) Next cmbPort.Text = cmbPort.Items.Item(0) cmbBaud.Text = cmbBaud.Items.Item(0) btnDisconnect.Enabled = False End Sub 'Page Load Code Ends Here .... 'Connect Button Code Starts Here .... Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click SerialPort1.PortName = cmbPort.Text SerialPort1.BaudRate = cmbBaud.Text SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.DataBits = 8 SerialPort1.Open() btnConnect.Enabled = False btnDisconnect.Enabled = True End Sub 'Connect Button Code Ends Here .... 'Disconnect Button Code Starts Here .... Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click SerialPort1.Close() btnConnect.Enabled = True btnDisconnect.Enabled = False End Sub 'Serial Port Receiving Code Starts Here .... Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived ReceivedText(SerialPort1.ReadExisting()) End Sub 'Serial Port Receiving Code Ends Here .... 'Serial Port Receiving Code(Invoke) Starts Here .... Private Sub ReceivedText(ByVal [text] As String) If Me.rtbReceived.InvokeRequired Then Dim x As New SetTextCallback(AddressOf ReceivedText) Me.Invoke(x, New Object() {(text)}) Dim fine As String = Mid([text], 7, 3) Dim list As Integer = ListBox3.Items.Add(text) Else Me.rtbReceived.Text &= [text] End If End Sub End Class
PIEBALDconsult
Разделение интересов. Разбейте задачу на более мелкие задачи.