名前付きパイプを介して 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 なのか誰か知っていますか?