2009-05-25 85 views
2

我剛剛意識到,TextReader,Console.In類型沒有BeginRead方法。從控制檯異步讀取。

如何從Console.In實現異步讀取?

我的第一個想法是得到一個句柄,並讓服務員等待那個句柄發信號。但是這涉及到很多Win32調用。

有沒有更簡單的方法來做到這一點? 也許上線:

Stream s = (Stream) Console.In; 
s.BeginRead(..) 

任何想法?

+0

你可以做類似於我對這個問題的答案的東西http://stackoverflow.com/a/23628232/659190 – Jodrell 2014-05-13 11:16:57

回答

0

創建自己的類,將調用線程發送到Console.Read並將所有讀取的數據存儲在某處。然後用EndRead結束線程並讓它返回它讀取的數據。

+1

該線程會在閱讀呼叫時被阻塞。你如何解鎖它? (說控制關機。)你是否建議Thread.Abort()? 難道這不會使未讀定義狀態下的流讀取? /L – leiflundgren 2009-05-28 08:15:09

3

您可以在單獨的線程中輪詢Console.KeyAvailable,然後在數據可用時立即讀取數據。