Below is a multithreaded queue with progress reporting and nice exception handling that I implemented for a project. I hope it might help someone else. You can copy and paste the following code into a console app to see how to use it. using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Threading; namespace WorkQueueTest { class Program { static readonly object locker = new object(); static void Main(string[] args) { //You can play with ......