在网上找的代码,然后修改的。 //Comm.cs using System; using System.Runtime.InteropServices; namespace Comm { public class myCom { #region WINAPI常量 /// <summary> /// 写标志 /// </summary> private const uint GENERIC_READ = 0x80000000; /// <summary> /// 读标志 /// </summary> private const uint GENERIC_WRITE = 0x40000000; /// <summary> /// 打开已存在 /// </summary> private const int OPEN_EXISTING = 3; /// <summary> /// 无效句柄 /// </summary> private const int INVALID_HANDLE_VALUE = -1; #endregion #region 成员变量 /// <summary> /// 端口名称(COM1,COM2...COM4...) /// </summary> public int PortNum; /// <summary> /// 波特率9600 /// </summary> public int BaudRate; /// <summary> /// 数据位4-8 /// </summary> public byte ByteSize; /// <summary> /// 奇偶校验0-4=no,odd,even,mark,space /// </summary> public byte Parity; /// <summary> /// 停止位 /// </summary> public byte StopBits; // 0,1,2 = 1, 1.5, 2 /// <summary> /// 超时长 /// </summary> public int ReadTimeout; /// <summary> /// COM口句柄 /// </summary> private int hComm = INVALID_HANDLE_VALUE; /// <summary> /// 串口是否已经打开 /// </summary> public bool Opened = false; #endregion /// <summary> /// 设备控制块结构体类型 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct DCB { /// <summary> /// DCB长度 /// </summary> public int DCBlength; /// <summary> /// 指定当前波特率 /// </summary> public int BaudRate; /// <summary> /// 指定是否允许二进制模式 /// </summary> public int fBinary; /// <summary> /// 指定是否允许奇偶校验 /// </summary> public int fParity; /// <summary> /// 指定CTS是否用于检测发送控制,当为TRUE是CTS为OFF,发送将被挂起。 /// </summary> public int fOutxCtsFlow; /// <summary> /// 指定CTS是否用于检测发送控制 /// </summary> public int fOutxDsrFlow; /// <summary> /// DTR_CONTROL_DISABLE值将DTR置为OFF, DTR_CONTROL_ENABLE值将DTR置为ON, DTR_CONTROL_HANDSHAKE允许DTR"握手" /// </summary> public int fDtrControl; /// <summary> /// 当该值为TRUE时DSR为OFF时接收的字节被忽略 /// </summary> public int fDsrSensitivity; /// <summary> /// 指定当接收缓冲区已满,并且驱动程序已经发送出XoffChar字符时发送是否停止。 /// TRUE时,在接收缓冲区接收到缓冲区已满的字节XoffLim且驱动程序已经发送出 /// XoffChar字符中止接收字节之后,发送继续进行。 FALSE时,在接收缓冲