2012-01-24 110 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序列化時,解串器會在讀取可能通過網絡套接字傳輸的輸入流時阻塞。