public void Dispose() { lock (Pipes) { ListeningPipe?.Dispose(); ListeningPipe = null; foreach (var p in Pipes.Values) { p.Dispose(); } Pipes.Clear(); } lock (PushPipes) { ListeningPushPipe?.Dispose(); ListeningPushPipe = null; foreach (var p in PushPipes) { p.Dispose(); } PushPipes.Clear(); } }
protected void BeginPushPipeListen() { if (!Running) { return; } lock (PushPipes) { if (ListeningPushPipe != null) { ListeningPushPipe.Dispose(); // Shouldn't happen too } // Note: PipeDirection.InOut ensures the client can set ReadMode, IDK why but it works this way ListeningPushPipe = new NamedPipeServerStream(Name + PipeConnection.PUSH_SUFFIX, PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 0, BufferSize, CreateSecurity()); ListeningPushPipe.BeginWaitForConnection(OnPushPipeConnect, null); } }