先讲一下,我得到的数据全是机器产生的,间隔一段时间发送一次数据,数量比较大
代码贴一部分:
  if (serialPort1.IsOpen)
            {
                rxByteLength = serialPort1.BytesToRead;//获得长度
                if (rxByteLength > 0)
                {
                    rxBytes = new byte[rxByteLength];
                    serialPort1.Read(rxBytes, 0, rxByteLength);//存至数组
                    rxNumber += rxByteLength;//rx计数器加1
                    textBoxRx.Text = "RX:" + rxNumber.ToString();//显数计数
                    if (button停止显示.Text == "停止显示")
                    {
                        if (checkBox16进制显示.Checked)
                        {
                            for (int i = 0; i < rxByteLength; i++)
                            {
                                rxString += rxBytes[i].ToString("x2").ToUpper() + " ";//转为string
                                check01(rxBytes[i].ToString("x2").ToUpper() + " ");
                                //check01(this.textBox接收.Text);
                            }
                        }这里面我用的是一个timer控件,当这句话check01(rxBytes[i].ToString("x2").ToUpper() + " ");
的时候就是把发过来的数据一组组的check01方法操作,可是好像根本就没用到这个方法,也就是没执行,如果我用check01(this.textBox接收.Text);
的时候就是把接受的数据从头读一遍的时候,check方法就发生了作用。这是什么原因?是不是timer控件跟不上传过来的数据的速度?

解决方案 »

  1.   

    首先,如果你使用WinForm的Timer,那么这个Timer只是一个由WM_TIMER消息中断引发的,它不是
    真正的线程控制方式,它不可重入的,如果上一次Timer没有执行完成则下一次被迫等待你可以使用System。Timer计时器,它是基于线程,可以重入的。
      

  2.   

    timer的代码根本没写,你让别人怎么分析?
      

  3.   

    timer控件,如果上一次没有执行完,会等待并计数,然后累计执行。楼主可以做个试验,这个也是timer控件的原理。
      

  4.   

    timer、空间我刚刚试过,如果用拖拉上来的timer控件要是用于高速度的采集根本不行!!!!