我正在使用 YAMLDotNet 库,并试图让 YamlVisitor 类触发它的事件,就像它到达每个节点类型的开始和结束时一样。如果流是使用文件或字符串的 StreamReader,这将正常工作,但如果我使用 serialPort 流,它会卡住(我想等待流结束??)
我的流是通过串行端口流动的数据,没有定义的结束。
我希望能够在每个 YAML 节点通过流时调用它们的开头和结尾处的函数。
这是我尝试过的:
static void Main(string[] args)
{
using (var sp = new SerialPort("COM1", 600, Parity.Odd, 8, StopBits.One))
{
sp.Open();
TextReader tr = new StreamReader(sp.BaseStream);
var yaml = new YamlStream();
// try assigning an instance of TracingVisitor before loading the stream...
yaml.Accept(new TracingVisitor());
// execution hangs at the following line
// waiting for something to indicate end of stream???
yaml.Load(tr);
}
}
当我打电话给yaml.Load(tr);
它时,它就坐在那里等待。我能够收集到它会在令牌进入时对其进行处理,但 TracingVisitor 类中没有任何内容被调用。
这是将串行数据提供给流的程序。
// 's' is a properly formatted YAML String
// This code sends the contents of 's' it over COM7
void Main()
{
// open a slow serial connection
using(var sp = new SerialPort("COM7", 600, Parity.Odd, 8, StopBits.One))
{
sp.Open();
sp.Write(s);
}
}
这是一个要运行的 YAML 字符串
#starting
---
debug: |
->28
TxMessages 100,
RxMessages 100
Loopback Test - US: PASS
...
---
results: >
TxMessages 100,
RxMessages 100,
Final: PASS
---
results: [1,55,233,546.99]
...
---
- ignore
- results:
min: -22
max: 125
---
list:
-
TxMessages: 100
RxMessages: 100
results: [1,55,233,546.99]
Loopback Test - US: PASS
- results: result String Here!
...