Whenever possible, execute the methods of a control only on the thread with which it was created. If you must call a method of a control from another thread, you must use the Invoke to call the method.
Also look into using the user friendly "BackroundWorker" control. This has built in "Complete", "Update" and "DoWork" methods. You can update your form control properties on the BackroundWorker Complete event.