2012-01-24 76 views
0

我正在解析模拟键盘的USB设备生成的相当复杂的数据流。如果我有一种叫做GetNextInputCharacter的方法,我可以对数据进行概念化和处理,最简单的方法是,我可以一次完成所有解析,而不必一次一个接一个地完成解析。不幸的是,我不知道在流中有多少字节需要等待,直到我对它进行了大量解析,而且我宁愿不等到最后解析它。同步处理异步输入

是否有任何机制或设计模式,可以从关键事件采取异步输入,并根据需要传递给我的解析方法?我所能想到的只是一个IEnumerable,它会在FIFO上忙于等待一个关键事件,然后每次产生一个关键事件。这似乎有点破解,但也许它会起作用。我只想让解析例程假装输入已经存在,并且不知道它必须等待事件。

回答

1

怎么是这样的:

 ... 
     var stream = //Set up stream 
     var data = from dataStream in StreamStuff(stream) select dataStream; 
     ... 
     private IEnumerable<String> StreamStuff(Stream stream) 
     { 
      stream.Open(); 
      while(stream.Read()) 
      { 
       //Do some stuff to your read value 
       yield return yourProcessedData; 
      } 
      stream.Close(); 
     } 
2

如何解析流,并使解析器阻塞,直到它有足够的字符作出明智的结果?然后来自USB设备的异步数据可以写入流。您可能必须编写自己的Stream实现,但这并不难。

这是一种常见的模式 - 当您使用内置的.net序列化时,解串器会在读取可能通过网络套接字传输的输入流时阻塞。