I normally use a backgroundworker for threading...

Backgroundworkers can NOT update a control in the dowork function, but CAN in the report/completed functions.

So it, requires a bit of ingenuity to get it to all function.

i am glad you think you figured it out, as i didnt really look at your code. Its always nice to see people figure things out on their own, as thats how learning works