问题描述
- 一个cs里的SerialPort接收事件里,修改主程序label元素属性,不成功。
-
大家好,我是新手。请问,有两个cs,一个是SerialPort.cs,一个是Power.MainForm.cs.问题是在 SerialPort的接收事件里,修改主程序的label元素的属性,为什么不成功。代码如下。
//serialPort.cs
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e){
byte[] list = new byte[size]; serial.Read(list,0,size); foreach(byte b int list) { builder.Append(b.ToString...) } string str = builder.ToString(); if(!"".Equals(str) && str.Contains("OA")) { PowerMainForm pf = new PowerMainForm();//这是主程序的UI界面 pf.setValue(); // 问题就是这里进行执行了,没有效果。???? }
}
//PowerMainForm的setValue()方法,是在PowerMainForm.cs里
public void setValue()
{
messageshow.show("开始显示");
label21.text = 'aa';
label23.visible = true;
}
解决方案
PowerMainForm pf = new PowerMainForm();//这是主程序的UI界面
你都new了一个了,还喝原来的主程序的界面有啥关系。你下面那个setValue是设置到你新建的那个里的label上去的,不是设置到你主程序的label上去的
解决方案二:
接收事件函数和主线程(你所说的主程序)运行在不同的线程,在图形界面的window程序里,不允许在其他线程中修改图形界面中的各种控件属性,要想修改必须通过一些消息等其他方法去更新。看看你的代码是不是违反了这一条
解决方案三:
我不知道你为什么要new一个主界面,直接访问不行吗?对于串口数据接收与显示,需要注意的是控件跨线程访问异常,这个时候需使用委托代理或者
关闭跨线程访问检测。。。
时间: 2024-10-02 09:25:07