C#事件声明办法 publiceventActionstring?OnLogMessage;publiceventActionbool?OnAutoRunCompleted;_modbusClient.OnLogMessageLogMessage;_modbusClient.OnDeviceStatusChangedOnModbusDeviceStatusChanged;//------直接调用//_plcModbusClient.OnLogMessage (msg) LogMessage($[PLC串口] {msg});//_plcModbusClient.OnDeviceStatusChanged (addr, online) //{// LogMessage($PLC设备 {addr} 状态: {(online ? 在线 : 离线)});// };privatevoidLogMessage(stringmessage){if(txtLog.InvokeRequired){txtLog.Invoke(newActionstring(LogMessage),message);return;}txtLog.AppendText($[{DateTime.Now:HH:mm:ss}]{message}\r\n);txtLog.ScrollToCaret();}privatevoidOnModbusDeviceStatusChanged(byteaddress,boolisOnline){if(InvokeRequired){Invoke(newAction(()OnModbusDeviceStatusChanged(address,isOnline)));return;}LogMessage($Modbus设备{address}状态:{(isOnline?在线:离线)});}其他窗体也可以调取这个事件来触发当前窗体内的数据变化事件可以加在本地例如 SerialPortSettingsform 下 创建一个public 的事件// 回调事件用于通知主窗体状态变化publiceventActionstring,Color?OnStatusUpdated;本窗体内事件的操作OnStatusUpdated?.Invoke(正在检测设备...,Color.Yellow);引用的窗体需要这样调取SerialPortSettingssettingsFormnewSerialPortSettings(_modbusClient);//实例化formsettingsForm.OnStatusUpdated(status,color)UpdateStatusComm(status,color);//挂载事件///settingsForm.OnStatusUpdated UpdateStatusComm(status, color);//这样应该可以///创建事件方法publicvoidUpdateStatusComm(stringtext,Color?colornull){if(InvokeRequired){Invoke(newAction(()UpdateStatusComm(text,color)));return;}lblStatusComm.Text$通信状态{text};if(color.HasValue)lblStatusComm.ForeColorcolor.Value;}这样就能不同窗体之间的事件调取-------------------------------------------------------------多参数操作1.在需要操作的类下面创建事件publiceventActionDeviceInfo,bool?OnDeviceStatusChanged;写入方法以便可以轻松的写入需要调用的界面的事件方法中_modbusClient.OnDeviceStatusChanged(addr,success){vardevice_devices.FirstOrDefault(dd.SlaveAddressaddr);if(device!null){device.Statussuccess?DeviceStatus.Online:DeviceStatus.Offline;device.LastCommunicationDateTime.Now;device.FailCountsuccess?0:device.FailCount1;OnDeviceStatusChanged?.Invoke(device,success);}};2.其他界面调用时需要的操作实例化后再初始化时先挂载事件下的方法_deviceManager.OnDeviceStatusChangedOnDeviceManagerStatusChanged;事件方法操作本身这样操作类的事件触发就到了这这个页面了privatevoidOnDeviceManagerStatusChanged(DeviceInfodevice,boolisOnline){if(InvokeRequired)//先判断是否异步{Invoke(newAction(()OnDeviceManagerStatusChanged(device,isOnline)));return;}if(device.DeviceId1device.DeviceId6){_deviceOnlineStatus[device.DeviceId]isOnline;}LogMessage($设备{device.Name}(地址:{device.SlaveAddress}) 状态:{(isOnline?在线 ✓:离线 ✗)});UpdateTabColors();if(device.DeviceId_currentDeviceId){UpdateCurrentDeviceStatus(isOnline);}intonlineCount_deviceOnlineStatus.Count(sstrue);if(onlineCount0){UpdateStatusComm($已连接 ({onlineCount}/6),Color.Green);}else{UpdateStatusComm(未连接,Color.Red);}}