A better more versatile way to do this is to use Task<> objects
public static class ThreadpoolExtensions { // Execute a method/procedure on the thread pool // The state parameters allow you to pass parameters into the thread routine public static bool ExecuteOnThreadPoolThread<T>(this Action<T> threadRoutine, T args) { return ThreadPool.QueueUserWorkItem(s => threadRoutine((T)s), args); } // Execute a method/procedure on the thread pool public static bool ExecuteOnThreadPoolThread(this Action threadRoutine) { return ThreadPool.QueueUserWorkItem((obj) => threadRoutine()); } }