问题很简单:
1.设置isReceiving 标志位,判断串口读取线程是否在占用资源。
2.设置读写超时,防止卡死在Read()命令里
本人比较懒, 在代码关键修改位置标了/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/,供大家参考。希望能帮到大家0 0
class CSerial
{
SerialPort myPort = null;
//委托
public event EventHandler Event_DataReceived;
//接收的容器,不需理会
private byte[] buffer = new byte[1024];
List<byte> byteSource = new List<byte>() { };
private byte[] byte_head = {
0xff,0xff};
private object locker = new object();//发送函数线程锁
bool isReceiving = false;/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
//构造函数
public CSerial(string portName,int baudRate)
{
myPort = new SerialPort(portName,baudRate,Parity.None,8,StopBits.One);
myPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
myPort.ReadTimeout = 1000;/*!!!!!!!!!