目前做一个上位机软件,主窗体FrmMain的pannel控件加载两个子窗体FrmCOM和FrmMotor,两个在子窗体共用一个主窗体的串口。两个子窗体通过按键切换。
主窗体(FrmMain):
public static SerialPort serialportcom = new SerialPort();
子窗体都分别创建了接收数据事件:
子窗体FrmCOM:
FrmMain.serialportcom.DataReceived += new SerialDataReceivedEventHandler(serialportcom_DataReceived1);
public void serialportcom_DataReceived1(object sender, SerialDataReceivedEventArgs e)
子窗体FrmMotor:
FrmMain.serialportcom.DataReceived += new SerialDataReceivedEventHandler(serialportcom_DataReceived2);
public void serialportcom_DataReceived2(object sender, SerialDataReceivedEventArgs e)
感觉两个接收事件产生冲突,无论哪个子窗体,都无法接收到数据,屏蔽其中一个,另一个就接收正常。
请教各位,哪里存在的问题?多窗体共用一个串口接收事件应该如何编写?
我考虑加载其中一个窗体注销另外一个事件,如下:
子窗体FrmCOM:
FrmMain.serialportcom.DataReceived += new SerialDataReceivedEventHandler(serialportcom_DataReceived1);
FrmMain.serialportcom.DataReceived -= new SerialDataReceivedEventHandler(serialportcom_DataReceived2);
public void serialportcom_DataReceived1(object sender, SerialDataReceivedEventArgs e)
子窗体FrmMotor:
FrmMain.serialportcom.DataReceived += new SerialDataReceivedEventHandler(serialportcom_DataReceived2);
FrmMain.serialportcom.DataReceived -= new SerialDataReceivedEventHandler(serialportcom_DataReceived1);
public void serialportcom_DataReceived2(object sender, SerialDataReceivedEventArgs e)
还是不行,谢谢大家,急。
一个窗口这里处理串口数据接收事件,收到时通过其他方式传递给另一个窗口,比如SendMessage之类的方法
弄一个隐藏窗口负责接收数据,再转发数据到需要的子窗体