OnSerialDataRecevied
イベントハンドラを含むSystem.IO.Ports.SerialPort
を処理するSerialPortWrapperクラスがあります。以下はそのクラスの概要であり、動作します。イベントを他のクラスに伝播してカスタマイズする方法は?
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
が発砲すると、このクラスでイベントが鳴りたいです。好ましくは、このイベントオブジェクトには、私がSerialPortWrapperのDataReceviedHandler
のハンドラとしてSecurityDataRecevied
を追加しようとしましたが、それにはない、むしろあなたがそれ以下のコードで見ることができますSerialPort
データ
よりも、SecurityPanel
はと懸念されることをカスタムデータが含まれています作業。
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を使用しているクラスにイベントを伝播させることができますどのように
- ですか?
- 発生しているクラスに関連するこれらのカスタムイベントを作成するにはどうすればよいですか?
これは動作しません - 'DataReceivedHandler'は決して' SecurityPanel'クラスでは不明ではありませんし、とにかく 'SecurityDataRecevied'そのコードを実行するために最初に起動します。 – DaveDev
@DaveDev、私の謝罪、私は間違った機能を修正しました。 –
優秀、ありがとう!私は「Received」のスペルが正しくないことも発見しました:-) – DaveDev