4

こんにちは私は名前付きパイプの使用についていくつか質問があります。

まず、パイプサーバーをセットアップしようとすると、以下のコードを使用すると、最初のクライアント接続の最後にサーバーが使用できなくなることに気付きました。ただし、すべてをしばらく(true)ブロックでラップします。私はこれを正しく行いましたか?または、各サーバーは一度だけアクティブになってから死ぬことになっていますか?

using (NamedPipeServerStream pipeServerStream = new NamedPipeServerStream(pipeName, PipeDirection.In, 1, transmissionMode))
{
    pipeServerStream.WaitForConnection();

    using (StreamReader sr = new StreamReader(pipeServerStream))
    {
        string message = null;

        do
        {
            message = sr.ReadLine();
            OnPipeCommunicationHandler(new IPCData() { Data = message });
        }
        while (message != null);
    }
} 

次に、サーバーを独自のスレッドでスピンオフする必要がありました。これを行わないと、アプリケーションが使用できなくなります。これは正常ですか?私はこれを正しく行いましたか?私はどこかで、namedpipeserverstreamがそれ自体のために独自のスレッドを作成することを読んだと思いましたが、それが事実であることがわかりません。

ありがとう!

4

1 に答える 1

3

はい、名前付きパイプの場合、次のクライアントが接続できるようにサーバーの新しいインスタンスを作成する必要があります。通常(少なくとも同期プログラミングでは)行われるのは、接続を待ってから、クライアントを処理するための新しいスレッドを生成し、元のスレッドをループバックして新しいサーバーを作成することです。

スレッド化に関しては、オブジェクトが舞台裏でスレッドを作成したとしても(私は疑わしいですが)、作成したコードが同期しているという事実を回避できないため、とにかく独自のスレッドにある必要があります。

于 2009-11-15T05:05:58.467 に答える