CSharp Threading Handbook - Titus, Tobin (Apress, 2012)
Multithreading is what enables complex applications to appear to be performing numerous tasks at the same time. They may respond to user events, while at the same time accessing network resources, or the file system. Such concurrent applications are written in different ways depending on the platform and the operating system, giving varying control over this process. Visual Basic 6, for instance, gave you little or no control, and it would implement threading behind the scenes, so that when an event occurred, it would execute the appropriate handling code within a particular threading model, but the application programmer never needed to concern themself with it. Visual C++ developers had access to the full complexity of the Windows threading and process model, but with great power comes great responsibility: C++ programmers could easily create multithreaded monsters, and had to learn and use a range of complex tricks to ensure that the threads were kept under control.