title: Must i abort this thread? Waiting for namedpipes. How do i do this properly?
body: <p><a href="https://stackoverflow.com/questions/1689360/best-way-to-keep-a-pipe-open-after-a-remote-close">I have another question about this same code and keeping the pipe open after the client closes it</a></p>
  
  <p>But here i have a problem gracefully terminating my app. My main code is below. There are 2 problems. 1) I am using Thread.Abort and 2) This application doesnt actually end. I can set a breakpoint and see abort is called and step to the ending brace but the IDE is still in debug mode and the process is still alive (in process manager). How do  i properly terminate this?</p>
  
  <pre><code>[STAThread]
  static void Main(string[] args)
  {
      Thread t;
      t = new Thread(new ThreadStart(ThreadStartServer));
      bool hasInstance = true;
      try
      {
          pipeStream = new NamedPipeServerStream(pipename);
          hasInstance = false;
          pipeStream.Close();
          t.Start();
          pipeStream.Dispose();
      }
      catch (System.IO.IOException)
      {
          hasInstance = true;
      }
      if (hasInstance)
      {
          clientPipeMessage(args[1]);
          return;
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
      t.Abort();
  }
  
  static public void ThreadStartServer()
  {
      while (true)
      {
          using (NamedPipeServerStream pipeStream = new NamedPipeServerStream(pipename))
          {
              Console.WriteLine("[Server] Pipe created {0}", pipeStream.GetHashCode());
              // Wait for a connection
              pipeStream.WaitForConnection();
              Console.WriteLine("[Server] Pipe connection established");
              using (StreamReader sr = new StreamReader(pipeStream))
              {
                  string temp;
                  while ((temp = sr.ReadLine()) != null)
                  {
                      Console.WriteLine("{0}: {1}", DateTime.Now, temp);
                  }
              }
          }
      }
      Console.WriteLine("Connection lost");
  }
  </code></pre>