private void callBack(IAsyncResult aIAsyncResult)
        {
            using (var lPipeServer = (NamedPipeServerStream)aIAsyncResult.AsyncState)
            {
                try
                {
                    lPipeServer.EndWaitForConnection(aIAsyncResult);
                }
                catch (Exception)
                {
                }

                // we have a connection established, time to wait for new ones while this thread does its business with the client
                // this may look like a recursive call, but it is not: remember, we're in a lambda expression
                // if this bothers you, just export the lambda into a named private method, like you did in your question
                startListen();

                if (!lPipeServer.IsConnected)
                {
                    return;
                }

                StreamString lStreamString = new StreamString(lPipeServer);


                string stringData = lStreamString.ReadString();

                lPipeServer.Close();

                if (MessageDelegateEvent != null)
                {
                    MessageDelegateEvent(stringData);
                }
            }
        }
        public void send(string SendStr, int TimeOut = 10000)
        {
            try
            {
                using (NamedPipeClientStream pipeStream = new NamedPipeClientStream
                                                              (".", mPipeClientName, PipeDirection.Out))
                {
                    pipeStream.Connect(TimeOut);

                    StreamString lStreamString = new StreamString(pipeStream);

                    lStreamString.WriteString(SendStr);
                }
            }
            catch (Exception)
            {
            }
        }