/// <summary> /// The function called when a client connects to the named pipe. Note: This method is called on a non-UI thread. /// </summary> /// <param name="iAsyncResult"></param> private void NamedPipeServerConnectionCallback(IAsyncResult iAsyncResult) { try { // End waiting for the connection _namedPipeServerStream.EndWaitForConnection(iAsyncResult); // Read data and prevent access to _namedPipeXmlPayload during threaded operations lock (_namedPiperServerThreadLock) { // Read data from client var xmlSerializer = new XmlSerializer(typeof(NamedPipeXmlPayload)); _namedPipeXmlPayload = (NamedPipeXmlPayload)xmlSerializer.Deserialize(_namedPipeServerStream); // _namedPipeXmlPayload contains the data sent from the other instance // As an example output it to the textbox // In more complicated cases would need to do some processing here and possibly pass to UI thread ////////////////// ////////////////// ////////////////// ////////////////// /// } } catch (ObjectDisposedException) { // EndWaitForConnection will exception when someone closes the pipe before connection made // In that case we dont create any more pipes and just return // This will happen when app is closing and our pipe is closed/disposed return; } catch (Exception) { // ignored } finally { // Close the original pipe (we will create a new one each time) _namedPipeServerStream.Dispose(); } // Create a new pipe for next connection NamedPipeServerCreateServer(); FormsExternalStuff.RecievedMessageCheck(_namedPipeXmlPayload.Payload[0].ToString()); }
/// <summary> /// Uses a named pipe to send the currently parsed options to an already running instance. /// </summary> /// <param name="namedPipePayload"></param> private void NamedPipeClientSendOptions(NamedPipeXmlPayload namedPipePayload) { try { using (var namedPipeClientStream = new NamedPipeClientStream(".", PipeName, PipeDirection.Out)) { namedPipeClientStream.Connect(3000); // Maximum wait 3 seconds var xmlSerializer = new XmlSerializer(typeof(NamedPipeXmlPayload)); xmlSerializer.Serialize(namedPipeClientStream, namedPipePayload); } } catch (Exception) { // Error connecting or sending } }
public PipeClient() { // We are not the first instance, send the named pipe message with our payload and stop loading var namedPipeXmlPayload = new NamedPipeXmlPayload { Payload = new List <string> () { "Mensagem" } }; // Send the message NamedPipeClientSendOptions(namedPipeXmlPayload); // Stop loading form and quit //Close(); }