C#中COM串列埠連線、傳送、接收資料
阿新 • • 發佈:2018-11-16
該文中使用的串列埠接收資料方法不會造成cpu佔用過高等問題
原始碼地址:https://download.csdn.net/download/horseroll/10756130
demo效果圖:
1.首先宣告一個Serial變數
SerialPort serialPort1 = new SerialPort();
2.進行串列埠連線
public void opencom() { try { //波特率 serialPort1.BaudRate = 9600; //資料位 serialPort1.DataBits = 8; serialPort1.PortName = comboBox1.Text; //兩個停止位 serialPort1.StopBits = System.IO.Ports.StopBits.One; //無奇偶校驗位 serialPort1.Parity = System.IO.Ports.Parity.None; serialPort1.ReadTimeout = 100; serialPort1.Open(); if (!serialPort1.IsOpen) { MessageBox.Show("埠開啟失敗"); return; } else { richTextBox1.AppendText("埠" + comboBox1.Text + "開啟成功\r\n"); } serialPort1.DataReceived += serialPort1_DataReceived; } catch (Exception ex) { serialPort1.Dispose(); richTextBox1.AppendText(ex.Message); } }
3.串列埠接收資料事件
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { Thread.Sleep(50); //(毫秒)等待一定時間,確保資料的完整性 int len int len = serialPort1.BytesToRead; string receivedata = string.Empty; if (len != 0) { byte[] buff = new byte[len]; serialPort1.Read(buff, 0, len); receivedata = Encoding.Default.GetString(buff); } richTextBox1.AppendText(receivedata + "\r\n"); }
4.串列埠傳送資料
serialPort1.Write(textBox1.Text);
5.斷開串列埠
serialPort1.Dispose();
6.附贈方法,得到可用串列埠號
String[] portnames = SerialPort.GetPortNames();
foreach (var item in portnames)
{
comboBox1.Items.Add(item);
}