0

だから私はC#を1日使っています。私が書いている最初のアプリケーションは、単純なコンソールベースのIRCクライアントですが、思ったより難しいです。consoleとirc-serverの2つのストリームから読み取っているので、ある種の非ブロッキングI/Oが必要です。

現時点では、次のコードがあります。

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

ただし、これは常にsInputを実行します。これは、.ReadLine()がブロックされており、最終的に最後にTrueが返されるため、ORの2番目のブロックが実行されることはないためです。

これに対する解決策は何ですか?スレッドを使って自分で実装しますか?標準のC#ライブラリにNIOライブラリが見つからないようです。このプログラムを過度に複雑にしたくないので、私は小さくてクリーンなソリューションを好む。

どんな助けでもとてもいいでしょう。ありがとう。

4

2 に答える 2

1

C# の学習に関して言えば、あなたは間違いなく最深部に飛び込んでいます。あなたが設定した質問タグに基づいて、直接の入力/出力の問題よりもネットワーク側の支援を求めていると思います。どの言語を使用していても、ネットワーキングは簡単ではないと言っても過言ではありません。おそらく、あなたを助ける最善の方法は、あなたが実装しようとしていることを示す例の方向性を示すことです. オープンソースのネットワーク ライブラリであるnetworkComms.netには、サンプルの 1 つとしてチャット アプリケーションがあります(11 行のみ)。ご覧になった後にご不明な点がございましたら、お問い合わせください。

于 2012-04-08T10:49:40.600 に答える
0

のような非同期操作を使用してみることができますが、それはの代わりにをBeginRead()使用することを意味します。StreamStreamReader

したがって、あなたの場合は、はい、別のスレッドを作成し、そこで他のブロッキング呼び出しを実行した方が最も簡単だと思います。ただし、そうする場合は、おそらくを使用して、2つのスレッドで共有されているリソースへのアクセスを同期することを忘れないでくださいlock

于 2012-04-08T11:10:32.713 に答える