If Ramy's way works for you, then best of luck, but as for the original post. The problem with using the background worker was probably that whatever dll control you were using expects a drawing surface and you weren't supplying one, possible, In not familiar with this frame grabber, which makes it harder to help, more importantly the objects you were using in the background worker would have to be passed to the background workers dowork event handler via an object in the DoWorkEventArgs. So the code for your background worker is not correct.
What ever the control famegrabber is needs to be instantiated inside the dowork event handler, or a function that the event hander calls, all the code must not interact with anything from the original code. so essentially the code in the dowork event handler needs to be complete, as in like it was its own stand alone style application, so it would instantiate a new object of the control, pass to that whatever collection or file name you needed, then add that data to a new collection, or a save it to a file, then pass that info back to the work completed event via the e.Result property.
many programmers think one day they are just going to hop into multithreading applications and don't' realize how much trouble it can cause. Its actually difficult. and the .net threading class makes it almost too easy. making it seem that less is going on that actually …