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

如何重写串口控件的事件?
最近在做一个项目,需要读取16个com(com1~com16)的数据,并将这16个口的数据分别放到对应的textbox(txt1~txt16)中。

我不想拖16个控件或者用线程轮询的方式来对数据进行处理,想用事件触发的方式,让这16个com控件统一触发一个事件,并将。现在有一个问题,如果用:


com[i].DataReceived+=new SerialDataReceivedEventHandler(com_DataReceived);

的方式直接做的话,我没有办法知道究竟是那个com控件触发了这个事件。


private void com_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
  {
   
  if (this.richTextBox1.InvokeRequired)
  {
  SetCallBack d = new SetCallBack(AppendTxt);
  this.Invoke(d, new object[] {com.ReadLine() });//此处出现,无法释放问题
  }
  else
  {
  AppendTxt(com.ReadLine());
  }
  }
触发的事件中,sender和e两个参数都无法知道是那个控件触发了这个事件!


怎么才能解决这个问题呢? 是否需要override重写一下这个事件,怎么写呢?


------解决方案--------------------
接收事件不是有Object sender吗,这就是SerialPort对象,你把所有的SerialPort的事件都绑定到同一个事件上,通过sender判断就是了