private static void ServerThread(object data) { var pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut, numThreads); int threadId = Thread.CurrentThread.ManagedThreadId; pipeServer.WaitForConnection(); Console.WriteLine("Client connected on thread[{0}].", threadId); try { StreamString ss = new StreamString(pipeServer); ss.WriteString("I am the one true server!"); string filename = ss.ReadString(); ReadFileToStream fileReader = new ReadFileToStream(ss, filename); Console.WriteLine("Reading file: {0} on thread[{1}] as user: {2}.", filename, threadId, pipeServer.GetImpersonationUserName()); pipeServer.RunAsClient(fileReader.Start); } catch (IOException e) { Console.WriteLine("ERROR: {0}", e.Message); } pipeServer.Close(); }