C# 串口接收数据为什么特别慢,该怎么处理
C# 串口接收数据为什么特别慢
本人自己C#写的一个串口程序,本来想用它来实时显示波形的,但是串口接收数据的时候太慢了。程序是在串口收到数据时候richtext上输出字符,115200的波特率发现每秒钟只能输出十几个“er”字符。但是用网上下的一个串口调试器,每秒钟能输出上百个字符。这是什么原因?底层的问题么?
本人自己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();//清除所有 } } }