软件有个按钮,按一下会通过串口发送一个数据到下位机,然后下位机收到会发一个数据到软件,就是这个过程,软件卡住了,只是偶然,正常不会这样。
想问的是,软件卡住的原因有什么?数据通讯过程对电脑造成了什么影响?内存吗?
这个操作应该是同步执行的,下位机处理时间长导致的UI线程卡住,可能耗时的操作应该放到非UI线程进行处理
如果必须要等通信完成才能操作,可以异步处理通信,同时UI线程加个Loading动画,通信处理完后停止动画
主要看软件对数据的处理和连接是否流畅。 你可以模拟大量数据收发和连接中断的情况下,电脑的内存和CPU波动
内存溢出也可能导致软件卡住的
应该独立用一个线程进行数据通讯;软件UI进程不应该直接与数据通讯。
下位机数据处理的时间很短,而且上位机也没有正在进行的UI进程,就是下位机收到数据发送一个指令,上位机收到指令后在textbox中打一行字“收到”。这样做是不对的。
下位机收到数据发送一个指令,上位机收到后应该开启一个新线程在textbox中打一行字“收到”。可以用异步委托在textbox中写字“收到”
这么小的通讯和内存,机器性能无关。
在接受线程里面,操作主窗体控件,需要在主窗体声明一个委托,比如名称为"消息",在主窗体在定义一个过程,比如名称:显示数据
然后在线程里面需要显示数据,就实例化这个消息委托,比如名称dh
判断 this.InvokeRequired = True 执行 this.Invoke(dh)