日期:2014-05-18  浏览次数:20863 次

用一个_DataReceived()能否处理多个串口的触发事件?

private delegate void CardDelegate(string str);
System.IO.Ports.SerialPort left1CardModulePort = new System.IO.Ports.SerialPort(); System.IO.Ports.SerialPort left2CardModulePort = new System.IO.Ports.SerialPort();
System.IO.Ports.SerialPort right1CardModulePort = new System.IO.Ports.SerialPort();
System.IO.Ports.SerialPort right2CardModulePort = new System.IO.Ports.SerialPort(); 
.....


private void CardModulePort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
  Label1.Invoke(new CardDelegate(myProcess), new object[] { });
}

private void myProcess(string str)
{
  string new1 = str; 
}

我的问题是:通过怎样改写代码,可以实现,若left1CardModulePort串口有信息传入,则new1的值为"Left1";若right1CardModulePort串口有信息传入,则new1的值为"Right1";余类推。
谢谢!

------解决方案--------------------
SerialPort类没有Name或Tag等可用作标识的属性,不好直接做。可以从SerialPort继承新类并添加合适的标识属性,利用DataReceived事件的sender获取这个标识属性进行判断
太麻烦,没太大必要。其实为每一个SerialPort指定各自的DataReceived事件就好了嘛
------解决方案--------------------
C# code
if(sender==left1CardModulePort)
{
    ......
}else if(sender==right1CardModulePort)
{
    ......
}