System.ComponentModel.BackgroundWorker Class

Executes an operation on a separate thread.

See Also: BackgroundWorker Members


public class BackgroundWorker : Component


The System.ComponentModel.BackgroundWorker class allows you to run an operation on a separate, dedicated thread. Time-consuming operations like downloads and database transactions can cause your user interface (UI) to seem as though it has stopped responding while they are running. When you want a responsive UI and you are faced with long delays associated with such operations, the System.ComponentModel.BackgroundWorker class provides a convenient solution.

To execute a time-consuming operation in the background, create a System.ComponentModel.BackgroundWorker and listen for events that report the progress of your operation and signal when your operation is finished. You can create the System.ComponentModel.BackgroundWorker programmatically or you can drag it onto your form from the Components tab of the Toolbox. If you create the System.ComponentModel.BackgroundWorker in the Windows Forms Designer, it will appear in the Component Tray, and its properties will be displayed in the Properties window.

To set up for a background operation, add an event handler for the BackgroundWorker.DoWork event. Call your time-consuming operation in this event handler. To start the operation, call BackgroundWorker.RunWorkerAsync. To receive notifications of progress updates, handle the BackgroundWorker.ProgressChanged event. To receive a notification when the operation is completed, handle the BackgroundWorker.RunWorkerCompleted event.


You must be careful not to manipulate any user-interface objects in your BackgroundWorker.DoWork event handler. Instead, communicate to the user interface through the BackgroundWorker.ProgressChanged and BackgroundWorker.RunWorkerCompleted events.

System.ComponentModel.BackgroundWorker events are not marshaled across AppDomain boundaries. Do not use a System.ComponentModel.BackgroundWorker component to perform multithreaded operations in more than one AppDomain.

If your background operation requires a parameter, call BackgroundWorker.RunWorkerAsync with your parameter. Inside the BackgroundWorker.DoWork event handler, you can extract the parameter from the DoWorkEventArgs.Argument property.

For more information about System.ComponentModel.BackgroundWorker, see How to: Run an Operation in the Background.


Namespace: System.ComponentModel
Assembly: System (in System.dll)
Assembly Versions:,
Since: .NET 2.0