I have a class (NamedPipeManager) which has a thread (PipeThread) that waits for a NamedPipe connection using (ConnectNamedPipe) and then reads (ReadFile) - these are blocking calls (not-overlapped) - however there comes a point when I want to unblock them - for example when the calling class tries to stop the NamedPipeManager...

How can I interupt it? Using Thread.abort? Thread.interrupt? Is there a proper way to handle this?
Refer to the code below which illustrates my current situation

main()
    {
        NamedPipeManager np = new NamedPipeManager();
            ... do stuff ...
        ... do stuff ...
        np.Stop();		// at this point I want to stop waiting on a connection
    }


    class NamedPipeManager
    {
    private Thread PipeThread;
    
    public NamedPipeManager
    {
        PipeThread = new Thread(new ThreadStart(ManagePipes));
        PipeThread.IsBackground = true;
        PipeThread.Name = "NamedPipe Manager";
        PipeThread.Start();
    }

    private void ManagePipes()
    {
        handle = CreateNamedPipe(..., PIPE_WAIT, ...);
        ConnectNamedPipe(handle, null);		// this is the BLOCKING call waiting for client connection
        
        ReadFile(....);				// this is the BLOCKING call to readfile after a connection has been established
        }


    public void Stop()
    {
        /// This is where I need to do my magic
        /// But somehow I need to stop PipeThread
        PipeThread.abort();		//?? my gut tells me this is bad
    }
    };

So, in function Stop() - how would I gracefully unblock the call to ConnectNamedPipe(...) or ReadFile(...)?

Any help would be appreciated.
Thanks,

Comments
unreformed cross-poster

Again - asI asked you previously - is there a rule againt doing it?
Most often people on the 2 different forums are not the same, and I get various answers.

So please - if this is a rule let me know - otherwise please explain why this causes you such an issue ...

This article has been dead for over six months. Start a new discussion instead.