2011-10-20 16 views
2

クラスNamedPipeServerStreamで作業するときのバグは、すべての着信接続に対して、新しいオブジェクトを作成してメソッドWaitForConnectionを呼び出す必要があるということです。NamedPipeServerStreamとWaitForConnectionメソッド

私は何をしたいがそのように、whileループの呼び出し上記の方法で繰り返し、その後1つのNamedPipeServerStreamオブジェクトを作成し、することです:

NamedPipeServerStream s2; 
using (s2 = new NamedPipeServerStream("pipe_name", PipeDirection.InOut)) { 
    while(true) { 
     ss2.WaitForConnection(); 
     //do something here 
    } 
} 

しかし、私はこれを行うとき、私はメッセージ

を取得

ストリームが切断されました。

アドバイスはありますか?

答えて

5

NamedPipeServerStreamを使用するには、それが提供するプログラミングモデルで作業する必要があります。これは、基になるWindowsハンドルを名前付きパイプカーネルオブジェクトにラップするためです。名前付きパイプの処理方法ではないので、使用しているように使用することはできません。あなたが本当に接続1つずつ単一のスレッド上で対処したい場合は

、裏返しあなたのループを回す:

while (true) 
{ 
    using (NamedPipeServerStream ss2 = new NamedPipeServerStream("pipe_name", PipeDirection.InOut) 
    { 
    ss2.WaitForConnection(); 
    // Stuff here 
    } 
} 

もっとそう、あなたはどのハンドルマルチスレッドパイプサーバーをしたいです接続は並列に行われます。そうであれば、さまざまな方法があります。他のSOの質問を検索すると、たとえばhereまたはhereのようにいくつかのパターンが表示されます。

関連する問題