If you're interacting with a UI I'd use a BackgroundWorker, otherwise use a ThreadPool or Thread.
If you don't care about events at all until your task is finished, you can just deregister/register for the StateChange event at the start/end of your task.
-Patrick