C# 串口收发线程问题 界面卡死

fengyy115 2012-09-13 11:36:49
第一次做程序,先描述一下程序功能,我认为是自己不会用C#导致的各种问题,我不知道正确的方法。
软件与下位机是一问一答的方式,收到的数据包160个字节。
现在我使用timer控件来计时发送指令要数据,在received中委托处理
delegate void HandleInterfaceUpdateDelegate(byte[] text);
HandleInterfaceUpdateDelegate interfaceUpdateHandle = null;

interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(Update); //实例化委托对象

private void Update(byte[] _datas)
{
if (_datas.Length == 2)
{
tslab_rece.Text = String.Format(" 接收:{0} 字节 ", jsCount);
// EditState = byteToHexStr(_datas);
// msg.AppendText(byteToHexStr(_datas));//显示在textbox
Editstate(_datas);//数据处理,更改按钮等状态 多个控件被修改
}
if (_datas.Length == 160)
{
tslab_rece.Text = String.Format(" 接收:{0} 字节 ", jsCount);
EditBuf = byteToHexStr(_datas);
//msg.AppendText(EditBuf);
EditDatas(EditBuf);//160个字节的显示在界面上
EditErr(_datas);//状态栏显示 错误帧
}

}

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,界面就开始卡,数据也不发送了。
我不知道是不是我的思路就不对,应该怎么去修改才能保证界面更新,和数据收发,还有绘图这样的功能实现呢?
...全文
299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyy115 2012-09-13
  • 打赏
  • 举报
回复
可是现在我不明白到底怎么样才能实现这个多线程后者异步处理........我搞不懂这些关系了,我太菜了,现在用egininvoke是没用的么[Quote=引用 2 楼 的回复:]
因为你的主线程在执行数据传递 你无法再去操作窗体或者做其他事的
用多线程或者异步处理吧
[/Quote]
andy1020tc 2012-09-13
  • 打赏
  • 举报
回复
因为你的主线程在执行数据传递 你无法再去操作窗体或者做其他事的
用多线程或者异步处理吧
饺子87 2012-09-13
  • 打赏
  • 举报
回复
最简单的就是使用BackgroundWorker控件来做异步处理。
fengyy115 2012-09-13
  • 打赏
  • 举报
回复
高手能指点下么

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧