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.
}