10

名前付きパイプを介して gui アプリケーションと通信している Windows サービスがあります。そのため、アプリが接続するのを待っているスレッドが実行されており、一度実行すると正常に実行されます。しかし、スレッドが名前付きパイプ ストリーム サーバーの新しいインスタンスを作成している場合、既に確立されている接続が切断され、すべてのインスタンスがビジー状態の例外が発生します。例外がスローされるコード フラグメントは次のとおりです。

class PipeStreamWriter : TextWriter
{

    static NamedPipeServerStream _output = null;
    static StreamWriter _writer = null;
    static Thread myThread = null;

        public PipeStreamWriter()
        {
            if (myThread == null)
            {
                ThreadStart newThread = new ThreadStart(delegate{WaitForPipeClient();});
                myThread = new Thread(newThread);
                myThread.Start();
            }
        }

        public static void WaitForPipeClient()
        {
            Thread.Sleep(25000);
            while (true)
            {
                NamedPipeServerStream ps = new NamedPipeServerStream("mytestp");
                ps.WaitForConnection();
                _output = ps;
                _writer = new StreamWriter(_output);

            }
        }

NamedPipeServerStream ps = new NamedPipeServerStream("mytestp")新しいパイプ サーバー ストリームを 2 回目に作成すると、例外がスローされます。

編集:

答えが見つかりました。サーバーインスタンスの最大数が指定されている場合に機能します NamedPipeServerStream ps = new NamedPipeServerStream("mytestp",PipeDirection.Out,10);

これのデフォルト値は -1 のようです。これは、それほど重要ではない別の質問につながります: 1 のように振る舞うのに、なぜ 1 ではなく -1 なのか誰か知っていますか?

4

1 に答える 1