2012-04-07 6 views
0

私は今、C#を使っています。私が書いている最初のアプリケーションは単純なコンソールベースのIRCクライアントですが、それは難しいと思っていました。私は2つのストリームから読んでいるので、コンソール& irc-server私はある種のノンブロッキングI/Oが必要です。 .ReadLine()はブロックし、そう結局最後にTrueを返し、そう第二のブロックされているので非ブロッキングへのネットワークブロック、オプションとしてのスレッドのみ?

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

しかし、これは常に、sInputを実行します:私は、次のコードを持っている瞬間

のORの実行されることはありません。

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

非常に助かります。ありがとう。

+0

ちょうどFYI:あなたが探したいのは、非同期呼び出しでIOを処理することです。ノンブロッキングソケットは不要です。 –

答えて

1

C#を学ぶことについては、間違いなく深いところに飛び込んできました。あなたが設定した質問タグに基づいて、私はあなたがダイレクトインプット/アウトプットの問題よりもネットワーキング面でより多くの助けを借りていると思います。どんな言語を使っていても、ネットワーキングは間違いないことは間違いありません。おそらくあなたを助ける最良の方法は、実装しようとしていることを示す例の方向に向けることです。 networkComms.net、オープンソースのネットワークライブラリには、チャットアプリケーションの例の1つ、here(11行のみ)があります。見た後にご質問がありましたらお知らせください。

0

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

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

関連する問題