给位大侠,我有一个串口接收问题,每次给单片机发送数据,然后让单片机回发同样的数据给我,用于显示在文本框中,可是我发现当用调试运行的时候数据可以正常显示,但不用调试直接运行时数据就不能正常显示,小弟真不知错在哪儿,以下是我的程序,希望各位不惜指正一下,感激不尽
    void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                buffer.Clear();
                Listening = true;//设置标记,说明我已经开始处理数据,一会儿要使用系统UI的。   
                int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
                byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据                   
                comm.Read(buf, 0, n);//读取缓冲数据                
                //<协议解析>   
                buffer.AddRange(buf);
                bool data_1_catched = false;//缓存记录数据是否捕获到   
                //2.完整性判断   
                zs_sjzhen = new byte[buffer.Count];
                if (buffer.Count >= 4)//至少要包含头(1字节)+命令(1字节)+长度(1字节)+校验(1字节)   
                {                    //2.1 查找数据头   
                    if (buffer[0] == 0x7E)
                    {
                       
                        byte checksum = 0;
                        for (int i = 0; i < buffer.Count-1; i++)//7表示校验之前的位置   
                        {
                            checksum ^= buffer[i];
                        }
                       
                        //至此,已经被找到了一条完整数据。我们将数据直接分析,或是缓存起来一起分析                           buffer.CopyTo(0, zs_sjzhen, 0, buffer.Count);//复制一条完整数据到具体的数据缓存   
                        data_1_catched = true;
                        buffer.RemoveRange(0, buffer.Count);//正确分析一条数据,从缓存中移除数据。   
                    }
                    else
                    {
                        //这里是很重要的,如果数据开始不是头,则删除数据   
                        buffer.RemoveAt(0);
                    }
                }
                //分析数据   
                if (data_1_catched)
                {                    builder.Clear();//清除字符串构造器的内容   
                    //因为要访问ui资源,所以需要使用invoke方式同步ui。   
                    this.Invoke((EventHandler)(delegate
                    {
                        //依次的拼接出16进制字符串   
                        foreach (byte b in zs_sjzhen)
                        {
                            builder.Append(b.ToString("X2") + " ");                        }
                        //this.richTextBox1.AppendText(builder.ToString());
                        data_1_catched = false;
                   }));
                    this.Invoke((EventHandler)(delegate
                    {
                        this.richTextBox1.AppendText(builder.ToString());
                        // JYT_StartRunning();
                    }));                } 
            }
            finally
            {
                Listening = false;//我用完了,ui可以关闭串口了。   
            }
            
        }