1、实现代码
csharp
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、运行结果