TestSerialPort1.cs文件内容: using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;
using System.Text;
using System.Windows.Forms; using System.IO.Ports; using System.Threading;
namespace TestSerialPort1
{
public partial class TestSerialPort1 : Form
{
public bool sendRts = false;
public System.Threading.Thread sendDataThread; //public System.Threading.Thread receiveDataThread; SerialPort serialPort1 = new SerialPort(); private long TxBytes = 0; private long RxBytes = 0;
public TestSerialPort1() {
InitializeComponent();
this.serialPort1.DataReceived += System.IO.Ports.SerialDataReceivedEventHandler(this.datainport); Control.CheckForIllegalCrossThreadCalls = false; }
private void TestSerialPort1_Load(object sender, EventArgs e) {
foreach (string PortName in SerialPort.GetPortNames()) {
PortNamesCbB.Items.Add(PortName); } }
private void PortNamesCbB_SelectedIndexChanged(object sender, EventArgs e) {
new
if (serialPort1.IsOpen)
{
serialPort1.Close();
SetSerialPort(serialPort1); OpenSerialPort(serialPort1); } }
private void OpenSerialPortBtn_Click(object sender, EventArgs e) {
if (!serialPort1.IsOpen) {
BaudrateCbB.Enabled = false; ParityCbB.Enabled = false; DataBitsCbB.Enabled = false; StopBitsCbB.Enabled = false; AutoSendChk.Enabled = true; SetSerialPort(serialPort1); OpenSerialPort(serialPort1); } else
{
serialPort1.Close();
OpenSerialPortBtn.Text = \打开串口\ AutoSendChk.Enabled = false; BaudrateCbB.Enabled = true; ParityCbB.Enabled = true; DataBitsCbB.Enabled = true; StopBitsCbB.Enabled = true; }
}
private void SetSerialPort(SerialPort serialPortset) //设置串口参数 {
serialPort1.PortName = PortNamesCbB.Text; serialPort1.BaudRate = Convert.ToInt32(BaudrateCbB.Text); switch (ParityCbB.Text) {
case \
serialPort1.Parity = Parity.None; break; case \
serialPort1.Parity = Parity.Odd; break; case \
serialPort1.Parity = Parity.Even; break; case \
serialPort1.Parity = Parity.Mark; break;
case \
serialPort1.Parity = Parity.Space; break; }
//serialPort1.StopBits = StopBits.One; switch (StopBitsCbB.Text) {
case \
serialPort1.StopBits = StopBits.None; break; case \
serialPort1.StopBits = StopBits.One; break; case \
serialPort1.StopBits = StopBits.OnePointFive; break;
case \
serialPort1.StopBits = StopBits.Two; break; }
serialPort1.DataBits = Convert.ToInt32(DataBitsCbB.Text); }
private void SendBtn_Click(object sender, EventArgs e) {
SendData(serialPort1); }
private void SendData(SerialPort serialPort) {
sendDataThread = new ParameterizedThreadStart(this.SendStringData)); sendDataThread.Start(serialPort); while (!sendDataThread.IsAlive) {
Thread.Sleep(5); }
}
private void OpenSerialPort(SerialPort serialPortToOpen)
Thread(new
{
try {
serialPortToOpen.Open();
serialPort1.Encoding = Encoding.GetEncoding(-0); OpenSerialPortBtn.Text = \关闭串口\ } catch {
MessageBox.Show(serialPort1.PortName + \can not be opened! Please try another !\ serialPortToOpen.Close(); } }
private void TryToSendData(SerialPort serialPortTry, string strToSend) {
try {
serialPortTry.Write(strToSend); } catch
{
MessageBox.Show(\serial MessageBoxButtons.OK, MessageBoxIcon.Error); }
port
has
be
opened!\
\
}
private void SendStringData(object serialPort) {
SerialPort serialPort2 = (SerialPort)serialPort; ASCIIEncoding strData = new ASCIIEncoding(); //while (AutoSendChk.Checked) //{
byte[] strBytes = strData.GetBytes(SendBox.Text); if (HexSendChk.Checked)
{
for (int i = 0; i < strBytes.Length; i++) {
TryToSendData(serialPort1, strBytes[i].ToString()); }
}
else {
TryToSendData(serialPort1, SendBox.Text);
}
TxBytes += SendBox.Text.Length; TxCount.Text = TxBytes.ToString(); }
private void datainport(object sender, SerialDataReceivedEventArgs e) {
serialPort1.Encoding = Encoding.GetEncoding(-0); string inputdata = serialPort1.ReadExisting(); RxBytes += inputdata.Length; RxCount.Text = RxBytes.ToString();
ASCIIEncoding strData = new ASCIIEncoding(); byte[] strBytes = strData.GetBytes(inputdata);
if ((inputdata != String.Empty)&&(StopDisplayBtn.Text == \停止显示\ {
if (HexDisplayChk.Checked)
{
for(int i = 0; i < strBytes.Length; i++)
{
ReceiveBox.Text = ReceiveBox.Text + strBytes[i].ToString() + \ }
} else
{
ReceiveBox.Text = ReceiveBox.Text + inputdata; } } }
private void ClrRxBoxBtn_Click(object sender, EventArgs e) {
ReceiveBox.Clear(); }
private void ClrBtn_Click(object sender, EventArgs e) {
RxCount.Text = \ RxBytes = 0;
TxCount.Text = \ TxBytes = 0;