首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 串口接收数据为什么特别慢,该怎么处理

2012-09-14 
C# 串口接收数据为什么特别慢本人自己C#写的一个串口程序,本来想用它来实时显示波形的,但是串口接收数据的

C# 串口接收数据为什么特别慢
本人自己C#写的一个串口程序,本来想用它来实时显示波形的,但是串口接收数据的时候太慢了。程序是在串口收到数据时候richtext上输出字符,115200的波特率发现每秒钟只能输出十几个“er”字符。但是用网上下的一个串口调试器,每秒钟能输出上百个字符。这是什么原因?底层的问题么?

C# code
namespace WindowsFormsApplication1{    public partial class Form1 : Form    {        int pix_index;        bool recived=false;        int[] buff = new int[13];        int sw=1;        int index = 0;        List<float> AccX = new List<float>();        List<float> AccY = new List<float>();        List<float> AccZ = new List<float>();        List<float> GyroX = new List<float>();        List<float> GyroY = new List<float>();        List<float> GyroZ = new List<float>();        List<float> X = new List<float>();        public Form1()        {            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;            InitializeComponent();            string[] port = null;            try            {                port = SerialPort.GetPortNames();            }            catch (Exception ex)            {                throw new Exception("获取计算机COM口列表失败!\r\n错误信息:" + ex.Message);            }            comboBox1.Items.AddRange(port);                    }        private void button1_Click(object sender, EventArgs e)        {            if (button1.Text == "连接")            {                serialPort1.PortName = (string)comboBox1.SelectedItem;                try                {                    serialPort1.Open();                }                catch (Exception ex)                {                    MessageBox.Show("打开出错");                }            }            else            {                button1.Text = "连接";                serialPort1.Close();            }            if (serialPort1.IsOpen)            {                button1.Text = "已连接";                zGraph1.f_ClearAllPix();                zGraph1.f_reXY();                zGraph1.f_LoadOnePix(ref X, ref GyroX, Color.Red, 2);//增加一条曲线                zGraph1.f_AddPix(ref X, ref GyroY,Color.Blue,2);                zGraph1.f_AddPix(ref X, ref GyroZ, Color.Yellow, 2);                zGraph1.f_AddPix(ref X, ref AccX, Color.Green, 2);                zGraph1.f_AddPix(ref X, ref AccY, Color.White, 2);                zGraph1.f_AddPix(ref X, ref AccZ, Color.Lime, 2);            }        }        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)        {            int tmp;            //tmp = serialPort1.ReadByte();            richTextBox1.AppendText("er ");                        //switch(sw)            //{            //    case 1 :            //        if (tmp == 0x3f)            //            sw=2;            //        break;            //    case 2:            //        if (tmp == 0xee)            //            sw = 3;            //        else            //            sw = 1;            //        break;            //    case 3:            //        buff[index] = tmp;                               //        index++;            //        if (index == 12)            //        {            //            index = 0;            //            sw = 1;                                  //            recived = true;            //        }            //        break;            //}          //  if (recived)          //  {          //      X.Add(pix_index++);//X轴增加          //      recived = false;          //      GyroX.Add((short)(buff[0] << 8) + buff[1]);          //      GyroY.Add((short)(buff[2] << 8) + buff[3]);          //      GyroZ.Add((short)(buff[4] << 8) + buff[5]);          //      AccX.Add((short)(buff[6] << 8) + buff[7]);          //      AccY.Add((short)(buff[8] << 8) + buff[9]);          //      AccZ.Add((short)(buff[10] << 8) + buff[11]);          //      zGraph1.Refresh();//刷新显示          //      richTextBox1.Text += (short)((buff[0] << 8) + buff[1]);          //      richTextBox1.Text += " ";          //      richTextBox1.Text += (short)((buff[2] << 8) + buff[3]);          //      richTextBox1.Text += " ";          //      richTextBox1.Text += (short)((buff[4] << 8) + buff[5]);          //      richTextBox1.Text += " ";          //      richTextBox1.Text += (short)((buff[6] << 8) + buff[7]);          //      richTextBox1.Text += " ";          //      richTextBox1.Text += (short)((buff[8] << 8) + buff[9]);          //      richTextBox1.Text += " ";          //      richTextBox1.Text += (short)((buff[10] << 8) + buff[11]);          //      richTextBox1.Text += " ";          ////      richTextBox1.Text += buff[12];          //     // richTextBox1.Text += "\r\n";          //      richTextBox1.AppendText("\r\n");          //      richTextBox1.ScrollToCaret();          //  }                                           }        private void button2_Click(object sender, EventArgs e)        {            zGraph1.f_ClearAllPix();//清除所有        }    }} 



[解决办法]
探讨

引用:

引用:

引用:

你的串口写数据 的代码在哪?

我用不到写数据,只是读数据就很慢
在DataReceiced事件里 添加Thread.sleep(100)试试

恩,我晚上回去试试,这个主要作用是什么?

热点排行