Using a BackgroundWorker to complete a task C# with Example



Using a BackgroundWorker to complete a task C# with Example

The following example demonstrates the use of a BackgroundWorker to update a WinForms ProgressBar. The 
backgroundWorker will update the value of the progress bar without blocking the UI thread, thus showing a 
reactive UI while work is done in the background. 
namespace BgWorkerExample 
{ 
public partial class Form1 : Form 
{ 
//a new instance of a backgroundWorker is created. 
BackgroundWorker bgWorker = new BackgroundWorker(); 
public Form1() 
{ 
InitializeComponent(); 
prgProgressBar.Step = 1; 
//this assigns event handlers for the backgroundWorker 
bgWorker.DoWork += bgWorker_DoWork; 
bgWorker.RunWorkerCompleted += bgWorker_WorkComplete; 
//tell the backgroundWorker to raise the "DoWork" event, thus starting it. 
//Check to make sure the background worker is not already running. 
if(!bgWorker.IsBusy) 
bgWorker.RunWorkerAsync(); 
} 
private void bgWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
//this is the method that the backgroundworker will perform on in the background thread. 
/* One thing to note! A try catch is not necessary as any exceptions will terminate the 
backgroundWorker and report 
the error to the "RunWorkerCompleted" event */ 
CountToY(); 
} 
private void bgWorker_WorkComplete(object sender, RunWorkerCompletedEventArgs e) 
{ 
//e.Error will contain any exceptions caught by the backgroundWorker 
if (e.Error != null) 
{ 
MessageBox.Show(e.Error.Message); 
} 
else 
{ 
MessageBox.Show("Task Complete!"); 
prgProgressBar.Value = 0; 
} 
} 
// example method to perform a "long" running task. 
private void CountToY() 
{ 
int x = 0; 
 

int maxProgress = 100; 
prgProgressBar.Maximum = maxProgress; 
while (x < maxProgress) 
{ 
System.Threading.Thread.Sleep(50); 
Invoke(new Action(() => { prgProgressBar.PerformStep(); })); 
x += 1; 
} 
} 
} 
The result is the following... 

0 Comment's

Comment Form