Чтобы немного рассказать об этом, я разработал форму Windows, которая интерпретирует пакеты последовательных данных, отправленные из моего встроенного программного обеспечения через последовательный порт, в значимую отладочную информацию.
Я хочу отображать каждый байт каждого пакета в элементе управления TextBox. Элемент управления текстовым полем, отображающий информацию о пакете, на самом деле представляет собой вторую форму, открываемую первой формой. Вот код обработчика событий, который открывает вторую форму от первой:
Код: Выделить всё
private void ShowRawSerialData(object sender, EventArgs e)
{
SendSerialDataToForm = true;
if (SerialStreamDataForm == null)
SerialStreamDataForm = new RawSerialDataForm();
SerialStreamDataForm.Instance.Show();
}
Затем в моем обработчике событий получения последовательных данных я делаю следующее:
Код: Выделить всё
// Get bytes from the serial stream
bytesToRead = IFDSerialPort.BytesToRead;
MsgByteArray = new Byte[bytesToRead];
bytesRead = IFDSerialPort.Read(MsgByteArray, 0, bytesToRead);
// Now MsgByteArray has the bytes read from the serial stream,
// send to raw serial form
if (SendSerialDataToForm == true && SerialStreamDataForm != null)
{
SerialStreamDataForm.UpdateSerialDataStream(MsgByteArray);
}
Код: Выделить всё
public void UpdateSerialDataStream(Byte[] byteArray)
{
String currentByteString = null;
currentByteString = BitConverter.ToString(byteArray);
currentByteString = "0x" + currentByteString.Replace("-", " 0x") + " ";
if (RawSerialStreamTextBox.InvokeRequired)
{
RawSerialStreamTextBox.Invoke(new SerialTextBoxDelegate(this.UpdateSerialDataStream), new object[] { byteArray });
}
else
{
RawSerialStreamTextBox.Text += currentByteString;
}
RawSerialStreamTextBox.Update();
}
Код: Выделить всё
RawSerialStreamTextBox.Text = "0x01 0x7F 0x7E"
Код: Выделить всё
RawSerialStreamTextBox.Text = "0x01 0x7F 0x7E"
Есть идеи, что здесь может происходить?