I'd recommend a mixture of threads and delegates. First thing to do is spawn a new thread for your stream listener "master". The only purpose of this thread is to get it off of the main forms thread so the user will not see a performance hit when it does it's work. Then, from that thread, you'll launch your additional threads. These threads should be spawned with a reference to a new instance of a class that handles all incoming events. Once that thread is running, it will send and receive all of the data relating to the newsgroup you connect it to. Now for the delegates fun :). In each thread that spawns, you should have a delegate back to the main form that will allow you to update the users gui. Now, for an explanation of why this will work. When you start the new thread with a socket it will stay open until you specifically close it or the other end closes it. If the other end closes it, it's because of a timeout issue. If a timeout issue occurs on their side then it won't matter because that is a true indication that you're not gonna get anything else from them. The delegate back to the main form will fire the event no matter what is going on. There's no need to set up a loop or anything to monitor. The rest of your code can do whatever it wants and it will fire that event whenever the new data is received. Now, you seem like the kind of person who doesn't mind research, so here's a list of what to look for: System.Threading.Thread (will launch the new thread) Delegates Sockets A mixture of those three should give you what you need. Either that, or I'm loosing my mind and I'm just rambling on :)