如何重写串口控件的事件?
最近在做一个项目,需要读取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判断就是了