首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

用一个_DataReceived()能否处理多个串口的触发事件?该如何解决

2012-03-14 
用一个_DataReceived()能否处理多个串口的触发事件?private delegate void CardDelegate(string str)Syst

用一个_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){    ......} 

热点排行