从事件处理程序更改textBox.text

问题描述 投票:0回答:2

似乎无法在这里为我的生活找到答案。无论如何,事件处理程序怎么能改变Form的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();
                }
            }

任何帮助是极大的赞赏

c# events serial-port handler
2个回答
0
投票

DataReceivedHandler方法标记为static,因此无法访问实例成员textBox2。删除static解决问题了吗?


0
投票

DataReceived在它自己的线程上,你需要调用GUI才能更新文本框。

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

    this.Invoke((MethodInvoker)delegate
    {
        textBox2.AppendText(Data);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.