AnonymousPipeServerStream::DisposeLocalCopyOfClientHandle Method ()
.NET Framework (current version)
Closes the local copy of the AnonymousPipeClientStream object's handle.
Assembly: System.Core (in System.Core.dll)
The DisposeLocalCopyOfClientHandle method should be called after the client handle has been passed to the client. If this method is not called, the AnonymousPipeServerStream object will not receive notice when the client disposes of its PipeStream object.
The following example demonstrates a way to send a string from a parent process to a child process by using anonymous pipes. In this example, an AnonymousPipeServerStream object is created in a parent process with a PipeDirection value of Out.
#using <System.dll> #using <System.Core.dll> using namespace System; using namespace System::IO; using namespace System::IO::Pipes; using namespace System::Diagnostics; ref class PipeServer { public: static void Main() { Process^ pipeClient = gcnew Process(); pipeClient->StartInfo->FileName = "pipeClient.exe"; AnonymousPipeServerStream^ pipeServer = gcnew AnonymousPipeServerStream(PipeDirection::Out, HandleInheritability::Inheritable); // Show that anonymous pipes do not support Message mode. try { Console::WriteLine("[SERVER] Setting ReadMode to \"Message\"."); pipeServer->ReadMode = PipeTransmissionMode::Message; } catch (NotSupportedException^ e) { Console::WriteLine("[SERVER] Exception:\n {0}", e->Message); } Console::WriteLine("[SERVER] Current TransmissionMode: {0}.", pipeServer->TransmissionMode); // Pass the client process a handle to the server. pipeClient->StartInfo->Arguments = pipeServer->GetClientHandleAsString(); pipeClient->StartInfo->UseShellExecute = false; pipeClient->Start(); pipeServer->DisposeLocalCopyOfClientHandle(); try { // Read user input and send that to the client process. StreamWriter^ sw = gcnew StreamWriter(pipeServer); sw->AutoFlush = true; // Send a 'sync message' and wait for client to receive it. sw->WriteLine("SYNC"); pipeServer->WaitForPipeDrain(); // Send the console input to the client process. Console::Write("[SERVER] Enter text: "); sw->WriteLine(Console::ReadLine()); sw->Close(); } // Catch the IOException that is raised if the pipe is broken // or disconnected. catch (IOException^ e) { Console::WriteLine("[SERVER] Error: {0}", e->Message); } pipeServer->Close(); pipeClient->WaitForExit(); pipeClient->Close(); Console::WriteLine("[SERVER] Client quit. Server terminating."); } }; int main() { PipeServer::Main(); }
.NET Framework
Available since 3.5
Available since 3.5
Show: