Difference between BackgroundWorker and Thread?

A BackgroundWorker is a thread implementation that allows you to assign assign a method to be done.

It gives you an communication API that allows you to stop the work, track the progress, and get notified Asynchronously.


A BackgroundWorker is a ready to use class in WinForms allowing you to execute tasks on background threads which avoids freezing the UI and in addition to this allows you to easily marshal the execution of the success callback on the main thread which gives you the possibility to update the user interface with the results. It also gives the possibility to track progress and cancel the task. It uses threads from the thread pool.

On the other hand a Thread is a class allowing you to simply execute some task on a new thread. It's a much more basic concept.


While the BackgroundWorker class isn't derived from the Thread class it enables you to manage the work a thread does much more easily than if you created and invoked the thread yourself.

It raises three key events:

  • DoWork - raised when the thread starts.
  • ProgressChanged - raised to report progress to the main UI thread.
  • RunWorkerCompleted - raised when the thread completes.

With these you can monitor the work the thread is doing after you call RunWorkerAsync() to start it.