我的程序一开始要执行一段代码,初始化一组串口,具体代码是这样的:
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.   

    谢谢hero7750的回答。
    那如果要做成多线程的效果,一个线程完全可以自己做到接受和发送,那么现在需要1个固定的线程为管理线程,如果有接受数据,管理线程会新开启一条新的线程去执行接受和发送。我在循环中为串口的数据接收委托绑定了comport_DataReceived方法。但具体要怎么判断有无数据接收呢?也就是说,我该在哪里创建一个新线程来接收数据?不应该是在comport_DataReiveive()方法中开辟新线程吧?
      

  2.   

    tigerii,你的意思是我在SerialDataReceivedEventHandler这个委托里绑定不同的方法么?这要怎么做呢?
      

  3.   

    另外写个类,封装一个comport对象,及对comport对象进行处理的事件方法。按照需要处理的串口,逐个创建对应的实例。