I actually develop a Windows service in VS 2012 / .NET 4.5.
The service is following the scheme of the code snippet below:
@Matt - thanks for the great code, really helpful. I found it worked even better if I added another test on _shutdownEvent:
case 1: // Process Event Process(); if(_shutdownEvent.WaitOne(0)) break; // don't loop again if a shutdown is needed ...