I have a service that monitors a directory for a file and performs operations when a file is dropped there. I have a FileSystemWatcher object (must be module level) that is instantiated in the OnStart Sub. I am not explicitly starting a new thread, although I am not positive what is going on behind the scenes with this object.
Either way, the service shouldn't just be stopping automatically. I was having this problem for a while, and it was caused by an unhandled error occuring in OnStart. Put a Try Catch block around your code in the OnStart. You can write the errors to the event log using the EventLog object. This helped me work through the problems, and now everything works great.