The Task Processor
On the server side, a separate application processes tasks one at a time. This application could be modeled as a Windows service (as a similar application was in Chapter 16); but in this case, a Windows Forms application is used, both to allow for a rich user interface complete with a displayed log of information and to demonstrate a few important threading techniques.
The task processor is actually split into two assemblies: a TaskProcessor library component that encapsulates the custom rendering code, and a TaskProcessorUI executable application. The TaskProcessorUI application scans through the list of available tasks using the database component and processes each one using the TaskProcessor component.