The BackgroundWorker class in the System.ComponentModel namespace (in the .NET Framework 2.0 and later) lets you launch time-consuming operations on a separate thread, which helps keep your user interface (UI) responsive. In contrast, running long time-consuming operations on the main thread blocks the whole UI, essentially “freezing” it until the operation is complete.
The following example shows how to launch a simple background operation using BackgroundWorker:
// Load complex time-consuming data.void LoadData(){ //Create background worker instance. BackgroundWorker loadDataBackgroundWorker = new BackgroundWorker(); //Create an event handler that actually does the background work. loadDataBackgroundWorker.DoWork += new DoWorkEventHandler( loadDataBackgroundWorker_DoWork); //(Optional) Create an event handler that gets called // when the background work is complete. loadDataBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(loadDataBackgroundWorker_RunWorkerCompleted); //Start execution of the background operation. loadDataBackgroundWorker.RunWorkerAsync();}void loadDataBackgroundWorker_DoWork(object sender, DoWorkEventArgs e){ //Perform complet task here. //Set e.Result if any result is expected from the task.}void loadDataBackgroundWorker_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e){ //Check for errors during background operation and re-throw. if (e.Error != null) throw e.Error; //Update any UI elements here using e.Result.}