I have a background worker. Before I invoke the worker I disable a button and make a gif visible. I then invoke the runworkerasync method and it runs fine until comleteion. On the 'RunWorkerCompleted()' I get a cross thread error. Any idea why?

+1 Your button was initially created from your first and main thread of the application, also know as the GUI thread. Then, on RunWorkerCompleted, you try to access the button that has been created from previous thread. Then, you need to verify whether your button can be accessed with the InvoqueRequired property, then retrying through an invoed delegate as you did, this to synchronize both threads. That's the way!
–
Will MarcouillerMar 15 '10 at 19:25