0

所以我已经使用 C# 一天了。我正在编写的第一个应用程序是一个简单的基于控制台的 IRC-Client,但它比我想象的要难。由于我从两个流中读取:控制台和 irc-server 我需要某种非阻塞 I/O。

目前我有以下代码:

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

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

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

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

4

2 回答 2

1

在学习 C# 时,您肯定已经深入了解了。根据您设置的问题标签,我假设您在网络方面的帮助比直接输入/输出问题更多。公平地说,无论您使用哪种语言,网络都绝对不是微不足道的。也许帮助您的最好方法是为您指明一个示例的方向,该示例演示您正在尝试实现的内容。networkComms.net是一个开源网络库,这里有一个聊天应用程序作为它的示例(只有 11 行长)。如果您在看过之后有任何问题,请告诉我。

于 2012-04-08T10:49:40.600 回答
0

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

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

于 2012-04-08T11:10:32.713 回答