1、实现代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace SerialPortDemo
{public partial class MainForm : Form{private readonly SerialPort serialPort=new SerialPort();public MainForm(){InitializeComponent();GetSerialPortName();}private void GetSerialPortName(){string[] names=SerialPort.GetPortNames();cbbName.DataSource = names;int[] bauds = new int[] { 4800, 9600, 11520 };cbbBaud.DataSource = bauds;cbbBaud.SelectedIndex = 1;int[] datas = new int[] { 6, 7, 8 };cbbData.DataSource = datas;cbbData.SelectedIndex = 2;Parity[] parities = new Parity[] {Parity.None, Parity.Odd, Parity.Even, Parity.Mark, Parity.Space};cbbParity.DataSource = parities;StopBits[] stopBits = new StopBits[] {StopBits.One, StopBits.Two, StopBits.OnePointFive };cbbStop.DataSource = stopBits;}private void btnOpen_Click(object sender, EventArgs e){if (btnOpen.Text.Equals("打开")){btnOpen.Text = "关闭";serialPort.PortName = Convert.ToString(cbbName.SelectedItem);serialPort.BaudRate = Convert.ToInt32(cbbBaud.SelectedItem);serialPort.DataBits = Convert.ToInt32(cbbData.SelectedItem);serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), cbbParity.SelectedItem.ToString());serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cbbStop.SelectedItem.ToString());//StopBits sb = (StopBits)cbbStop.SelectedIndex;//serialPort.StopBits= StopBits.One;serialPort.Handshake = Handshake.None;serialPort.DataReceived += SerialPort_DataReceived;serialPort.Open();}else{btnOpen.Text = "打开";serialPort.DataReceived -= SerialPort_DataReceived;serialPort.Close();}}private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){SerialPort sp = (SerialPort)sender;string indata = sp.ReadExisting();this.Invoke(new Action(() =>{lbxReceive.Items.Add(indata);}));}private void btnSend_Click(object sender, EventArgs e){if(serialPort.IsOpen){serialPort.Write(tbSend.Text.Trim());}}}
}
2、运行结果