Yes....welcome to the world of threading. We briefly covered this in class in regards to creating a thread and Invoking on the thread an object was created on. Imagine two threads, Thread1 is the form where the controls reside, Thread2 is the thread where data is going to be retrieved, for example. If Thread2 tries to access a control on Thread1, you will receive a Cross Thread Violation. This is not safe. If you look back in your notes, Ben talked about using an ISynchronize interface that allows you to invoke off of the thread where the control is dropped rather than the Thread2 where processing is taking place and is NOT the same thread the control was created on. The incorrect and "cheap-Johnny" way to get around this is to turn off the CrossThreadViolations: System.Windows.Forms.Form.CheckForIllegalCrossThreads = False
. BUT THIS IS NOT RECOMMENDED! You should Invoke on the proper thread and correctly resolve the illegal cross thread. You can implement the ISynchronizeInvoke interface on your user control (a sample was given during class). You could also pass over a reference of the form to the user control (which is what the ISynchronizeInvoke interface would ultimately help you do) and Invoke off of that object.
_SyncObject.Invoke(...)