Изменение textBox.text из обработчика событий - PullRequest
0 голосов
/ 15 января 2019

Не могу найти ответ здесь для жизни меня .. В любом случае, как обработчик события может изменить textBox.text формы?

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            //Do what ever you want with the data
            textBox2.Text = "test"; //alas, this doesn't work
        }

Обработчик событий создается при нажатии кнопки

private void button3_Click(object sender, EventArgs e)
        {
                    serialPort1.PortName = comboBox1.Text;
                    serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
                    serialPort1.RtsEnable = true;
                    serialPort1.DtrEnable = true;
                    serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
                    serialPort1.Open();
                }
            }

Любая помощь очень ценится

Ответы [ 2 ]

0 голосов
/ 17 января 2019

DataReceived находится в своем собственном потоке, вам нужно вызвать графический интерфейс для обновления текстового поля.

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string Data = serialPort1.ReadExisting();

    this.Invoke((MethodInvoker)delegate
    {
        textBox2.AppendText(Data);
    });
}
0 голосов
/ 16 января 2019

Метод DataReceivedHandler помечен static, поэтому он не может получить доступ к элементу экземпляра textBox2. Устраняет ли удаление static проблему?

...