Concurrent blocking Tasks in a BackgroundWorker
I would go with Task-based method (if you're using .Net 4.5) instead of the BackgroundWorker. That will sort out most of your problems.

Something in the vicinities of 

async Task&lt;List&lt;T&gt;&gt; yourJobAsync(...)
{
    var results = await Task.Run ( () =&gt;
    {
        //your job.
        return jobResults
    });
    return  yourJobAsyncResults
}