2012-04-07 108 views
0

所以我一直在使用C#一天。我正在編寫的第一個應用程序是一個簡單的基於控制檯的IRC客戶端,然而,我認爲它更難。由於我從兩個流讀取:控制檯& irc-server我需要某種非阻塞I/O。網絡阻塞到非阻塞,只有線程作爲選項?

此刻,我已經得到了下面的代碼:

while (((sInput = sr.ReadLine()) != null) || ((uuInput = Console.ReadLine()) != null)) 
       { 
        // stuff 
       } 

然而,這會一直執行sInput,因爲.ReadLine()是阻塞等最終在年底返回True,從而第二塊的OR將永遠不會被執行。

這是什麼解決方案?用線程自己實現它?我似乎無法在標準C#庫中找到任何NIO庫。我更喜歡有一個小而乾淨的解決方案,因爲我不想過分複雜這個程序。

任何幫助將是非常好的。謝謝。

+0

只是FYI:你想要尋找的是與異步調用處理IO;你不想要非阻塞套接字。 – 2012-04-08 10:54:55

回答

1

當你學習C#時,你肯定已經深入瞭解深度。基於您設置的問題標籤,我認爲您在網絡方面比直接輸入/輸出問題更能幫助您。可以說,使用任何語言進行網絡連接絕對不是微不足道的。也許最好的幫助你的方法是向你指出一個例子的方向,這個例子表明了你正在努力實現的東西。 networkComms.net,一個開源網絡庫有一個聊天應用程序here(只有11行)。如果您在查看後有任何疑問,請告訴我。

0

您可以嘗試使用異步操作,如BeginRead(),但這意味着使用Stream而不是StreamReader

所以,我認爲在你的情況下,是的,如果你創建另一個線程,並在那裏執行另一個阻塞調用,那將是最簡單的。但是如果你這樣做,不要忘記同步訪問兩線程共享的資源,可能通過使用lock