大家好,我是新手。请问,有两个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一个主界面,直接访问不行吗?对于串口数据接收与显示,需要注意的是控件跨线程访问异常,这个时候需使用委托代理或者
关闭跨线程访问检测。。。