网络阻塞到非阻塞,只有线程作为选项?

时间:2012-04-07 20:24:25

标签: c# networking tcp irc

所以我现在一直在使用C#。我写的第一个应用程序是一个简单的基于控制台的IRC客户端,然而它比我想象的更难。因为我正在阅读两个流:console& irc-server我需要某种非阻塞I / O.

目前我有以下代码:

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

但是,这将始终执行sInput,因为.ReadLine()是阻塞的,因此最终在结束时返回True,因此OR的第二个块将永远不会被执行。

这是什么解决方案?用线程自己实现它?我似乎无法在标准C#库中找到任何NIO库。我更喜欢有一个小而干净的解决方案,因为我不想让这个程序过于复杂。

任何帮助都会非常好。感谢。

2 个答案:

答案 0 :(得分:1)

在学习C#方面,你肯定会深入学习。基于您设置的问题标签,我假设您在网络方面的帮助比直接输入/输出问题更多。可以公平地说,使用你使用的任何语言的网络绝对是微不足道的。也许帮助您的最佳方式是指向一个示例,指示您尝试实现的内容。 networkComms.net,一个开源网络库,其中一个例子是聊天应用程序here(只有11行)。如果您在看了之后有任何问题,请告诉我。

答案 1 :(得分:0)

您可以尝试使用异步操作,例如BeginRead(),但这意味着使用Stream代替StreamReader

所以,我认为在你的情况下,是的,如果你创建了另一个线程并在那里执行了另一个阻塞调用,那将是最简单的。但是,如果您这样做,请不要忘记同步访问两个线程共享的任何资源,可能使用lock