【发布时间】:2014-06-26 07:19:02
【问题描述】:
我需要解析来自测试仪器的串行数据流,这似乎是响应式扩展的出色应用。
协议非常简单...每个“数据包”都是一个字母后跟数字。每种数据包类型的数字位数是固定的,但可能因数据包类型而异。例如
...A1234B123456C12...
我正在尝试将其分解为字符串的 Observable,例如
“A1234”“B123456”“C12”...
认为这很简单,但没有看到明显的解决方法(我对 LINQ 有一些经验,但对 Rx 很陌生)。
这是我到目前为止的代码,它从串行端口的 SerialDataReceived 事件中生成 Observable 字符。
var serialData = Observable
.FromEventPattern<SerialDataReceivedEventArgs>(SerialPortMain, "DataReceived")
.SelectMany(_ =>
{
int dataLength = SerialPortMain.BytesToRead;
byte[] data = new byte[dataLength];
int nbrDataRead = SerialPortMain.Read(data, 0, dataLength);
if (nbrDataRead == 0)
return new char[0];
var chars = Encoding.ASCII.GetChars(data);
return chars;
});
如何将serialData转换为String的Observable,其中每个字符串都是一个数据包?
【问题讨论】:
标签: c# serial-port system.reactive reactive-programming