Your best option is to not use the BackGroundWorker but instead use Task-based asynchronous programming where multiple operations can run at the same time.
Task based operations can be setup for cancellation, work with events and Interface such as IProgress (see also Reporting Progress from Async Tasks).
Bottom line is task base programming asynchronously you have more control than with a BackGroundWorker component.