The delegates aren't doing anything useful though. Using a delegate doesn't inherently make accessing controls thread-safe. You have to call the Invoke method of a control in order to cross the thread boundary and invoke the delegate on the UI thread, which you're not doing. You're invoking your delegates on the secondary thread so they are completely useless. Follow the CodeBank link in my signature and check out my post on Accessing Threads From Worker Threads to find out how to do it properly.