我的程序一开始要执行一段代码,初始化一组串口,具体代码是这样的:
for(int i=0;i<dt.Rows.Count;i++)
{
comport[i] = new SerialPort(); comport[i].PortName = Convert.ToString(dt.Rows[i]["COM"].ToString());
comport[i].Parity = Parity.Even; //偶
comport[i].BaudRate = 9600;//波特率
comport[i].DataBits = 8;//数据位
comport[i].Parity = Parity.None;//校验位
comport[i].RtsEnable = true;
comport[i].ReadTimeout = 3000;//超时 comport[i].DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived);
comport[i].ErrorReceived += new SerialErrorReceivedEventHandler(comport_ErrorReceived);
comport[i].Open();
}
comport[i].DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived);
comport[i].ErrorReceived += new SerialErrorReceivedEventHandler(comport_ErrorReceived);
这两行代码是将串口的信息到达委托绑定到comport_DataReceived方法里
问题是:我的串口在信息抵达之后,必然会触发comport_ErrorReceived这个方法。现在有很多个串口,如果在同一时间,不同的串口都有数据到达,就会执行这个comport_DataReceived方法,那这个方法是不是在不同的线程内执行?也就是说,他们的数据接收事件能不能达到多线程性质的异步运行,互不干扰? 第一次发帖提问,在这儿先谢谢回答问题的诸位!
for(int i=0;i<dt.Rows.Count;i++)
{
comport[i] = new SerialPort(); comport[i].PortName = Convert.ToString(dt.Rows[i]["COM"].ToString());
comport[i].Parity = Parity.Even; //偶
comport[i].BaudRate = 9600;//波特率
comport[i].DataBits = 8;//数据位
comport[i].Parity = Parity.None;//校验位
comport[i].RtsEnable = true;
comport[i].ReadTimeout = 3000;//超时 comport[i].DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived);
comport[i].ErrorReceived += new SerialErrorReceivedEventHandler(comport_ErrorReceived);
comport[i].Open();
}
comport[i].DataReceived += new SerialDataReceivedEventHandler(comport_DataReceived);
comport[i].ErrorReceived += new SerialErrorReceivedEventHandler(comport_ErrorReceived);
这两行代码是将串口的信息到达委托绑定到comport_DataReceived方法里
问题是:我的串口在信息抵达之后,必然会触发comport_ErrorReceived这个方法。现在有很多个串口,如果在同一时间,不同的串口都有数据到达,就会执行这个comport_DataReceived方法,那这个方法是不是在不同的线程内执行?也就是说,他们的数据接收事件能不能达到多线程性质的异步运行,互不干扰? 第一次发帖提问,在这儿先谢谢回答问题的诸位!
那如果要做成多线程的效果,一个线程完全可以自己做到接受和发送,那么现在需要1个固定的线程为管理线程,如果有接受数据,管理线程会新开启一条新的线程去执行接受和发送。我在循环中为串口的数据接收委托绑定了comport_DataReceived方法。但具体要怎么判断有无数据接收呢?也就是说,我该在哪里创建一个新线程来接收数据?不应该是在comport_DataReiveive()方法中开辟新线程吧?