C# 串口导致界面卡死

第一次做程序,先描述一下程序功能,我认为是自己不会用C#导致的各种问题,我不知道正确的方法。软件与下位机是一问一答的方式,收到的数据包160个字节。现在我使用timer控... 第一次做程序,先描述一下程序功能,我认为是自己不会用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,界面就开始卡,数据也不发送了。
我不知道是不是我的设计思路就不对,应该怎么去修改才能保证界面更新,和数据收发,还有绘图这样的功能实现呢?
展开
 我来答
iaskall
2012-09-12 · TA获得超过630个赞
知道小有建树答主
回答量:568
采纳率:83%
帮助的人:239万
展开全部
你应该另起线程,或者通过backgroundworker来执行界面的更新和收发。
你目前是将所有的处理都放在一个主线程中进行的,界面的更新就在这个主线程中,难免会引起界面卡死。
一个线程的执行相当于过程性的执行,是顺序执行,势必在某个操作耗时的时候会对界面更新或数据收发产生影响。
可以将源代码通过邮件发给我看看iaskall@163.com
追问
你好  我发到你邮箱了,麻烦你帮我看下,可能会很乱,我自己改来改去的越来越不能用,现在不知道从哪下手了,线程我是一点也不懂.........
深圳市容大彩晶科技有限公司
2024-11-20 广告
作为深圳市容大彩晶科技有限公司的工作人员,我可以确认**我们的广告机支持USB接口和SD卡读取**。无论是车载液晶广告机还是其他类型的广告机产品,都具备这一功能,便于用户通过USB或SD卡更新和播放视频、图片等广告内容。这一设计大大提升了广... 点击进入详情页
本回答由深圳市容大彩晶科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式