Элемент управления C# TextBox не обновляется новым текстомC#

Место общения программистов C#
Anonymous
Элемент управления C# TextBox не обновляется новым текстом

Сообщение Anonymous »

Я разработчик встроенного системного программного обеспечения для систем, критически важных для безопасности, поэтому я довольно новичок в C#, но хорошо владею языками на основе C.
Чтобы немного рассказать об этом, я разработал форму Windows, которая интерпретирует пакеты последовательных данных, отправленные из моего встроенного программного обеспечения через последовательный порт, в значимую отладочную информацию.
Я хочу отображать каждый байт каждого пакета в элементе управления TextBox. Элемент управления текстовым полем, отображающий информацию о пакете, на самом деле представляет собой вторую форму, открываемую первой формой. Вот код обработчика событий, который открывает вторую форму от первой:

Код: Выделить всё

private void ShowRawSerialData(object sender, EventArgs e)
{
SendSerialDataToForm = true;
if (SerialStreamDataForm == null)
SerialStreamDataForm = new RawSerialDataForm();
SerialStreamDataForm.Instance.Show();
}
В приведенном выше коде директива .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);
}
Где MsgByteArray — массив байтов полученного последовательного пакета. А вот код UpdateSerialDataStream:

Код: Выделить всё

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. Текст правильно обновляется строкой, которую я собираюсь добавить в текстовое поле! Например, если я передам массив байтов {0x01, 0x7F, 0x7E, то через отладчик я увижу, что значение

Код: Выделить всё

RawSerialStreamTextBox.Text = "0x01 0x7F 0x7E"
Проблема в том, что сам элемент управления текстовым полем не отображает вновь добавленный текст. Так что, хотя я могу подтвердить это с помощью отладчика,

Код: Выделить всё

RawSerialStreamTextBox.Text = "0x01 0x7F 0x7E"
текстовое поле в Windows не показывает «0x01 0x7F 0x7E», а остается пустым.
Есть идеи, что здесь может происходить?

Вернуться в «C#»