Found the problem! It seems a BGWorker isn't totally in a seperate thread, so it's finished event wasn't fireing (so the IsBusy variable i was checking would never be changed).

I solved the peoblem by changing my while loop to include 'Application.DoEvents()'

Now.... how do i give myself reputation points?? :P