У меня есть класс SerialPortWrapper, который работает с System.IO.Ports.SerialPort
, который включает в себя обработчик события OnSerialDataRecevied
.Ниже приведена схема класса, и он работает:
public class SerialPortWrapper : ISerialPortWrapper
{
public event SerialDataReceivedEventHandler DataReceviedHandler;
private readonly SerialPort _serialPort;
public SerialPortWrapper()
{
this._serialPort = new SerialPort
{
// configure SerialPort
};
this._serialPort.DataReceived += DataReceviedHandler;
this._serialPort.DataReceived += OnSerialDataRecevied;
}
public void Write(byte[] bytes, int offset, int count)
{
this._serialPort.Write(bytes, offset, count);
}
public void OnSerialDataRecevied(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
var bytes = new UTF8Encoding().GetBytes(sp.ReadExisting());
}
}
У меня также есть класс, который использует SerialPortWrapper.Я бы хотел, чтобы в этом классе произошло событие, когда OnSerialDataRecevied
срабатывает.Предпочтительно, чтобы этот объект события содержал пользовательские данные, которые были бы связаны с SecurityPanel
, а не SerialPort
data
. В приведенном ниже коде вы можете видеть, что я пытался добавить SecurityDataRecevied
в качестве обработчика дляSerialPortWrapper DataReceviedHandler
, но это не работает.
public class SecurityPanel : ISecurityPanel
{
private readonly ISerialPortWrapper _serialPortWrapper;
public SecurityPanel(ISerialPortWrapper serialPortWrapper)
{
_serialPortWrapper = serialPortWrapper;
_serialPortWrapper.DataReceviedHandler += SecurityDataRecevied;
}
private void SecurityDataRecevied(object sender, SerialDataReceivedEventArgs e)
{
// this doens't fire. Prefereably it would have a custom EventArgs object,
// rather than SerialDataReceivedEventArgs
}
public byte SendMessage(Message message)
{
// get bytes from message and send them to the SerialPort
_serialPortWrapper.Write(bytes, 0, bytes.Length);
}
}
У меня есть следующие вопросы:
- Как я могу распространить событие на классы, которые используют SerialPortWrapper?
- Как я могу сделать эти пользовательские события, относящиеся к классу, в котором они происходят?