Click here to Skip to main content
15,898,538 members

Comments by Member 10380571 (Top 1 by date)

Member 10380571 5-Nov-13 2:00am View    
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Text;
using System.Windows.Forms;

namespace BackgroundWorkerSample
{
public partial class Form1 : Form
{

BackgroundWorker m_oWorker;

private ManualResetEvent locker = new ManualResetEvent(true);

public Form1()
{
InitializeComponent();
m_oWorker = new BackgroundWorker();
m_oWorker.DoWork += new DoWorkEventHandler(m_oWorker_DoWork);
m_oWorker.ProgressChanged += new ProgressChangedEventHandler(m_oWorker_ProgressChanged);
m_oWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(m_oWorker_RunWorkerCompleted);
m_oWorker.WorkerReportsProgress = true;
m_oWorker.WorkerSupportsCancellation = true;


}

void m_oWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//If it was cancelled midway
if (e.Cancelled)
{
lblStatus.Text = "Task Cancelled.";
}
else if (e.Error != null)
{
lblStatus.Text = "Error while performing background operation.";
}

else
{
//lblStatus.Text = "Task Completed...";
this.BeginInvoke((MethodInvoker)delegate
{
lblStatus.Text = "Done";
button1.Enabled = false;


});



}
btnStartAsyncOperation.Enabled = true;
btnCancel.Enabled = false;


}


void m_oWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//Here you play with the main UI thread
progressBar1.Value = e.ProgressPercentage;
lblStatus.Text = "Processing......" + progressBar1.Value.ToString() + "%";
}


void m_oWorker_DoWork(object sender, DoWorkEventArgs e)
{


for (int i = 0; i < 100; i++)
{


locker.WaitOne();
Thread.Sleep(100);
m_oWorker.ReportProgress(i);


if (m_oWorker.CancellationPending)
{
e.Cancel = true;
m_oWorker.ReportProgress(0);
return;
}




}

//Report 100% completion on operation completed
m_oWorker.ReportProgress(100);
}


private void btnStartAsyncOperation_Click(object sender, EventArgs e)
{
btnStartAsyncOperation.Enabled = false;
btnCancel.Enabled = true;
button1.Enabled = true;
//Start the async operation here
m_oWorker.RunWorkerAsync();
}

private void btnCancel_Click(object sender, EventArgs e)
{
if (m_oWorker.IsBusy)
{
//Stop/Cancel the async operation here
m_oWorker.CancelAsync();
}
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{

if (button1.Text == "PAUSE")
{
locker.Reset();
button1.Text = "RESUME";
}
else
{
locker.Set();
button1.Text = "PAUSE";
}
}


}
}