@wkempf: Could not agree more about your comment on IDisposable. Even if you set aside the fact that it is a singleton there was no reason to implement IDisposable. Sadly this is a very common mistake and once devs see IDisposable used like this it is hard to break them of the habit. If I had a nickel for every time I saw a class that implements IDisposable to only set managed variables to null I'd be rich.
I have been a hobbyist C# programmer since VS 2005. Long story short it inspired me to go back to college and become a professional developer. I get out of college and what do I do? I get a job as a MFC C++ programmer. Hated it for the first week or two, I mean hated it. Then I started to like C++. Actually liked it a lot while creating non UI logic. But then came the day when my boss put me on UI projects. Just getting a label on the stinking screen is horrible. Trying to get text into or out of it.... Wow. Speaking of text... there are like 3-5 different types. C++ as a language is right up there with C# in many respects but interacting with C++ based UI is the deal breaker. I got a call from a .Net web development shop and jumped boat. That's my story, probably a very common one.