从事件处理程序更改 textBox.text
Changing textBox.text from event handler
似乎无法在这里找到我一生的答案..
无论如何,事件处理程序如何更改表单的 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();
}
}
非常感谢任何帮助
DataReceivedHandler
方法被标记为static
,所以它不能访问实例成员textBox2
。删除 static
是否解决问题?
DataReceived
在它自己的线程上,您需要调用 GUI 才能更新文本框。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string Data = serialPort1.ReadExisting();
this.Invoke((MethodInvoker)delegate
{
textBox2.AppendText(Data);
});
}
似乎无法在这里找到我一生的答案.. 无论如何,事件处理程序如何更改表单的 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();
}
}
非常感谢任何帮助
DataReceivedHandler
方法被标记为static
,所以它不能访问实例成员textBox2
。删除 static
是否解决问题?
DataReceived
在它自己的线程上,您需要调用 GUI 才能更新文本框。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string Data = serialPort1.ReadExisting();
this.Invoke((MethodInvoker)delegate
{
textBox2.AppendText(Data);
});
}