Начинающий (очень новичок) программист, работающий в VB. net ... Я читал много разных мнений по этому поводу, нарезка швов была бы лучшим решением, но на данный момент это немного выше моей головы. То, что я пытаюсь выполнить sh, - это чтение строки данных из последовательного порта (Bluetooth). Длина данных всегда одинакова и всегда заканчивается CRLF (данные - ASCII). Я читаю данные с цифрового динамометрического ключа, пользователь должен затянуть 6 болтов гаечным ключом, каждый болт отправляет строку данных через последовательный порт. Я читаю эти необработанные данные, извлекаю из строки фактическое значение крутящего момента и сохраняю его в базе данных. У меня работает соединение с базой данных, я могу читать данные и извлекать нужное значение. Проблема в том, что если пользователю по какой-то причине необходимо прекратить чтение, я не могу выйти из мероприятия. Я попытался добавить кнопку, которая устанавливает для переменной значение true (Dim BoolEscape as Boolean в значение «True»). Затем добавил вызов Application.DoEvents () с последующей проверкой, чтобы убедиться, что BoolEscape = True, затем выйдите из подпрограммы ... Из того, что я прочитал, это не работает и никогда не будет.
Полученная строка данных форматируется: "RE, 001,100.0,16 / 08 / 20,12: 45: 10CRLF"
Ниже приведен код из моего события BtnStartRead_Click ... Я показываю только 2 болта, потому что оно просто повторяется ... . Я считаю, что многопоточность - это ответ, но опять же, не понимаю, как это работает ....
Private Sub btnStartRead_Click(sender As Object, e As EventArgs) Handles btnStartRead.Click
On Error GoTo err_handle
boolEscape = False
txtBolt1.BackColor = Color.FromArgb(255, 255, 128)
txtBolt2.BackColor = Color.FromArgb(255, 255, 128)
txtBolt3.BackColor = Color.FromArgb(255, 255, 128)
txtBolt4.BackColor = Color.FromArgb(255, 255, 128)
txtBolt5.BackColor = Color.FromArgb(255, 255, 128)
txtBolt6.BackColor = Color.FromArgb(255, 255, 128)
lblA1.Visible = True
ShowRXon()
txtRaw1.Text = mySerialPort.ReadLine
ShowRXoff()
txtBolt1.Text = txtRaw1.Text.Substring(7, 4)
If checkValue(txtBolt1.Text) = False Then
txtBolt1.BackColor = Color.Red
End If
lblA1.Visible = False
lblA2.Visible = True
Application.DoEvents()
If boolEscape = True Then
MsgBox("You have STOPPED the measurment logging...", vbOKOnly)
boolEscape = False
Exit Sub
End If
ShowRXon()
txtRaw2.Text = mySerialPort.ReadLine
ShowRXoff()
txtBolt2.Text = txtRaw2.Text.Substring(7, 4)
If checkValue(txtBolt2.Text) = False Then
txtBolt2.BackColor = Color.Red
End If
lblA2.Visible = False
lblA3.Visible = True
Application.DoEvents()
If boolEscape = True Then
MsgBox("You have STOPPED the measurment logging...", vbOKOnly)
boolEscape = False
Exit Sub
End If
Как бы я go мог добавить это в отдельный поток или указать событие получения данных a лучше подход, чтобы линия всегда была одинаковой длины и всегда заканчивалась CRLF ... и если да, то как холодно я модифицирую ее, чтобы использовать это вместо этого.