"Thread cannot access object in which it was not created on"

That kind of error, or whatever it actually comes up with means exactly that. The thread that is trying to access a textbox, for example, that the thread did not specifically create itself, cannot access it simply because another thread may be doing something with it and mess it all up. So you have to invoke that textbox and say "hey, whats your status as of now". I showed you how to create instances of objects in a few of my sources, which is why i tryed to explain how to do things like that - its so much easier. Invoking objects is quite easy and actually makes a lot of sense once you get into the routine of it.

Take a look at my multi-threading example (attempt ) and see if you can get any idea in how to go about doing such things:

http://www.besthostingforums.com/showthread.php?t=37330

Edit: Making objects out of things and making them re-useable, things like that are really useful here. Make a delegate and make it useful. A general status delegate for example that will be constantly used is a good idea. So for example have:
PHP Code: 
public delegate void GeneralStatusDelegate(string statusint progressint maxProgress);
        private 
void GeneralStatus(string statusint progressint maxProgress)
        {
            
toolStripStatusLabel1.Text status;
            
toolStripProgressBar1.Maximum maxProgress;
            
toolStripProgressBar1.Value progress;

            if (
progress == maxProgress || progress == 0)
                
toolStripProgressBar1.Visible false;
            else
                
toolStripProgressBar1.Visible true;
        } 
This will be very useful to invoke as you can see. We can set a string status, a current progress of the progressbar and a MaxProgress. very useful