当收到串口的字节时,它会正确进入该处理程序,但GUI上的标签不会改变。 编辑:是的,它与GUI在同一个类中 编辑2 函数声明不需要是“静态的”...我只是从msdn复制粘贴an example 编辑3 在摆脱静态删除并使用类似this之类的内容后,它可以正常工作。 谢谢你的帮助
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Form1 gui = new Form1(); //main GUI
try
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
//gui.rxLabel.Text = indata;
gui.txLabel.Text = "testttingg";
}
.......
答案 0 :(得分:6)
为什么要声明表单的新实例?只需使用表单txLabel
在c#中:
this.txLabel.Text = "testing";
在vb.net中:
Me.txLabel.Text = "testing"
在您发布的示例代码中,您正在创建实际表单的新实例/引用。此外,使用现有实例,使用this
而不是新实例。
我必须编辑我的问题,因为我注意到你正在使用静态方法。
试试这个:
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Form1 f = (Form1) sender;
f.textBox1.Text = "testing";
}
private void button1_Click(object sender, EventArgs e)
{
DataReceivedHandler(this, null);
}
当然我只是从按钮事件中调用DataReceivedHandler()
,您可以从自己的事件中调用它。要点是你需要将当前实例this
传递给函数。一旦在函数内部不创建表单的新实例,只需设置对当前表单的引用,并使用该引用将设置应用于属性(txtBox或Label或其他)。
答案 1 :(得分:0)
您似乎正在实例化Form1的新实例,而不是访问内存中的现有表单。