当前位置:编程学习 > C#/ASP.NET >>

C# 串口数据处理 界面卡死

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

inte易做图ceUpdateHandle = new HandleInte易做图ceUpdateDelegate(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(inte易做图ceUpdateHandle, copydata);
   }
}

这160个字节基本上全部要显示在界面的各种label控件上,还有四组要传递到form2中在zedgraph中绘图,整个程序运行起来开始计时器能工作,但是如果移动界面或者打开form2,界面就开始卡,数据也不发送了。
我不知道是不是我的思路就不对,应该怎么去修改才能保证界面更新,和数据收发,还有绘图这样的功能实现呢?

另外 刚注册这个积分不知道怎么弄得....大家好心回复吧5555555
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,