SerialPort 的怪事
SerialPort sepor;
//------------------------------------------------------------
//说明: 打开串口
//参数:
//返回: false 失败 true 成功
//------------------------------------------------------------
public bool Open_SerialPort()
{
bool OpenFlag = false;
// Create a new SerialPort object with default settings.
sepor = new SerialPort();
sepor.PortName = PortName;
sepor.BaudRate = 9600;
sepor.DataBits = 8;
sepor.Parity = Parity.None;
sepor.StopBits = StopBits.One;
//
sepor.WriteBufferSize = 4096;
sepor.ReadBufferSize = 4096;
// Set the read/write timeouts
sepor.ReadTimeout = 1000;
sepor.WriteTimeout = 1000;
//sepor.ReceivedBytesThreshold = 1; //设置引发OnComm事件的字节长度
sepor.Open();
OpenFlag = sepor.IsOpen;
System.Array.Clear(buf, 0, buf.Length);
System.Array.Clear(b_Buffer, 0, b_Buffer.Length);
sepor.DiscardInBuffer(); //清除接受缓冲区
sepor.DiscardOutBuffer();//清除发送缓冲区
_newFile = true; CurrentPos = 0;
sepor.DataReceived += new SerialDataReceivedEventHandler(ReceiveMessage);
return OpenFlag;
}
//------------------------------------------------------------
//说明: 串口事件接收数据,并进行数据处理,此过程为独占
//参数: object sender, SerialDataReceivedEventArgs e
//返回: void
//------------------------------------------------------------
private void ReceiveMessage(object sender, SerialDataReceivedEventArgs e)
{
Monitor.Enter(this);
try
{
int datanum = sepor.BytesToRead;//缓冲区中的字节数
byte[] Rec_byte = new byte[datanum];
sepor.Read(Rec_byte, 0, datanum);//从缓冲区读取数据
//将接收到的数据进行组合处理
AddBuffer(Rec_byte, datanum);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Monitor.Exit(this);
}
在接收数据时,经过一段时间后,对方发送数据时,此接收事件怎么也不触发。用串口工具发数据,也不触发,但同时用串口工具来接收时,则可以接收到数据,对C#了解不深,请各位帮忙。