第一次做程序,先描述一下程序功能,我认为是自己不会用C#导致的各种问题,我不知道正确的方法。软件与下位机是一问一答的方式,收到的数据包160个字节。现在我使用timer控件来计时发送指令要数据,在received中委托处理private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { int n = sp.BytesToRead;//读取长度 byte[] readBuffer = new byte[n]; sp.Read(readBuffer, 0, n); //读入缓存 ArrayList_byte_R1.AddRange(readBuffer); if (ArrayList_byte_R1.Count > 0 && ArrayList_byte_R1.Count < 160) { return; } if (ArrayList_byte_R1.Count == 160) { ArrayList_byte_R1.CopyTo(copydata); jsCount = ArrayList_byte_R1.Count; ArrayList_byte_R1.Clear (); this.BeginInvoke(interfaceUpdateHandle, copydata); } }这160个字节基本上全部要显示在界面的各种label控件上,还有四组要传递到form2中在zedgraph中绘图,整个程序运行起来开始计时器能工作,但是如果移动界面或者打开form2,界面就开始卡,数据也不发送了。我不知道是不是我的设计思路就不对,应该怎么去修改才能保证界面更新,和数据收发,还有绘图这样的功能实现呢?
你应该另起线程,或者通过backgroundworker来执行界面的更新和收发。你目前是将所有的处理都放在一个主线程中进行的,界面的更新就在这个主线程中,难免会引起界面卡死。一个线程的执行相当于过程性的执行,是顺序执行,势必在某个操作耗时的时候会对界面更新或数据收发产生影响。可以将源代码通过邮件发给我看看iaskall@163.com 追问 你好 我发到你邮箱了,麻烦你帮我看下,可能会很乱,我自己改来改去的越来越不能用,现在不知道从哪下手了,线程我是一点也不懂.........