private void PipeListener()
 {
     CheckIfDisposed();
     try {
         Listen = PipeManager.Listen;
         if (DebugMessageRef != null)
         {
             DebugMessageRef("Pipe " + this.PipeConnection.NativeHandle.ToString() + ": new pipe started" + Environment.NewLine);
         }
         while (Listen)
         {
             LastAction = DateTime.Now;
             string request = PipeConnection.Read();
             LastAction = DateTime.Now;
             if (request.Trim() != "")
             {
                 PipeConnection.Write(PipeManager.HandleRequest(request));
                 if (DebugMessageRef != null)
                 {
                     DebugMessageRef("Pipe " + this.PipeConnection.NativeHandle.ToString() + ": request handled" + Environment.NewLine);
                 }
             }
             else
             {
                 PipeConnection.Write("Error: bad request");
             }
             LastAction = DateTime.Now;
             PipeConnection.Disconnect();
             if (Listen)
             {
                 if (DebugMessageRef != null)
                 {
                     DebugMessageRef("Pipe " + this.PipeConnection.NativeHandle.ToString() + ": listening" + Environment.NewLine);
                 }
                 Connect();
             }
             PipeManager.WakeUp();
         }
     }
     catch (System.Threading.ThreadAbortException) { }
     catch (System.Threading.ThreadStateException) { }
     catch (Exception) {
         // Log exception
     }
     finally {
         this.Close();
     }
 }