利用串口SerialPort控件实现PC与PC的串口通信(使用轮询模式),主要利用Timer这种方法实现轮询操作。
其中界面设计如图所示:
代码为:
using System;
using System.Windows.Forms;
namespace SerialPortExample1
{
public partialclass Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private voidbutton1_Click(objectsender, EventArgse)
{
serialPort1.Close();
Close();
}
private voidForm1_Load(objectsender, EventArgse)
{
serialPort1.PortName ="COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
}
private voidForm1_FormClosing(objectsender, FormClosingEventArgse)
{
if (serialPort1.IsOpen)serialPort1.Close();
}
private voidbutton2_Click(objectsender, EventArgse)
{
string outdata =textBox2.Text;
if (outdata =="" )
{
MessageBox.Show("发送的数据不能为空!","" );
}
serialPort1.Write(outdata);
}
private voidtimer1_Tick(objectsender, EventArgse)
{
string data;
data = serialPort1.ReadExisting();
textBox1.Text =textBox1.Text +data;
}
}
}
利用串口SerialPort控件实现PC与PC的串口通信(使用事件模式)
代码为:
using System;
using System.Windows.Forms;
namespace SerialPortExample2
{
public partialclass Form1 : Form
{
string data;
////string data1;
//short data2;
public Form1()
{
InitializeComponent();
}
private voidbutton1_Click(objectsender, EventArgse)
{
serialPort1.Close();
Close();
}
private voidForm1_Load(objectsender, EventArgse)
{
serialPort1.PortName ="COM1";
serialPort1.BaudRate = 9600;
//serialPort1.Encoding= Encoding.ASCII;
serialPort1.Open();
}
private voidDisplayText(objectsender, EventArgse)
{
textBox1.Text =textBox1.Text +data;
}
private voidForm1_FormClosing(objectsender, FormClosingEventArgse)
{
if (serialPort1.IsOpen)serialPort1.Close();
}
private voidbutton2_Click(objectsender, EventArgse)
{
string outdata =textBox2.Text;
if (outdata =="" )
{
MessageBox.Show("发送的数据不能为空!","" );
}
serialPort1.Write(outdata);
}
private voidserialPort1_DataReceived_1(objectsender, System.IO.Ports.SerialDataReceivedEventArgse)
{
data = serialPort1.ReadExisting();
this.Invoke(newEventHandler(DisplayText));
//textBox1.Text= "11";
}
}
}
//////////////////////////////////////////////////////////
在事件模式中有一部分需要解释的就是,为了保证串口接受的及时和快速,所以串口的事件处理直接放在异步线程进行处理,所以在进行显示的时候用了委托的方法。当然还有很多其他的方法,可以看一下C# 多线程在UI线程的展示的这一部分内容。
上述代码下载:点击打开链接
虚拟串口介绍:
在编写串口软件时,或者需要进行串口调试时,难免要用到串口进行测试。此时我们便可以通过虚拟串口进行测试。
打开虚拟串口软件,串口类型分为三类,第一类是“physical ports”表示物理串口,是实际的串口;第二类便是“virtual ports”虚拟串口;第三类表示其他类型的串口,一般用不上。
添加虚拟串口都是成对添加的,首先选择两个虚拟串口号,一般不要选择com1和com2,可以从com3开始设定,这里选择com3和com4,然后点击“添加串口”。 打开com3和com4可以看到下拉栏中串口信息,包括串口打开状态、波特率、接收和发送的字节数。
打开设备管理器查看虚拟串口,可以看到多了com3和com4两个串口,并且两个串口是对应的,com3发的数据由com4接收,com4发的数据由com3接收。
这样即使没有真实的串口也可以确认我们的程序是否可以按照我们的预期进行配置。
虚拟串口下载:点击打开链接