The BackgroundWorker is an event-driven way to perform an operation on a separate and dedicated thread, it is mostly used when you need to show the user a friendly progress while you are operating a long running process such as downloading files, connecting to database and getting results…etc.
public partial class BackgroundWorker : Form
{
public BackgroundWorker()
{
InitializeComponent();
bgWorker.DoWork += BgWorker_DoWork;
bgWorker.ProgressChanged += BgWorker_ProgressChanged;
bgWorker.RunWorkerCompleted += BgWorker_RunWorkerCompleted;
}
private void btnStartCounting_Click(object sender, EventArgs e)
{
progressBar.Maximum = Convert.ToInt32(txtCount.Text);
lblStatus.ForeColor = Color.Red;
lblStatus.Text = "Counting...";
bgWorker.WorkerReportsProgress = true;
bgWorker.RunWorkerAsync();
}
private void BgWorker_DoWork(object sender, DoWorkEventArgs e)
{
for (var Counter = 1; Counter <= progressBar.Maximum; Counter++)
{
bgWorker.ReportProgress(Counter);
System.Threading.Thread.Sleep(50);
}
}
private void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
lblStatus.ForeColor = Color.Green;
lblStatus.Text = "Done";
}
private void BgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
lblPercent.Text = e.ProgressPercentage.ToString();
progressBar.Value = e.ProgressPercentage;
}
}