CancellationPending Always False

  • Thread starter Thread starter Krip
  • Start date Start date
K

Krip

I'm writing a WinForms app in .NET 3.0 using the BackgroundWorker component.
I call the CancelAsync method, and in another method check
CancellationPending. CancellationPending is always false. Anyone else have
this? Or know why this is?

Thanks,
Krip
 
Hi Krip,

Did you set BackgroundWorker.WorkerSupportsCancellation = true?
 
Krip said:

Then I'm afraid we will need to see some code to be able to help you.
CancelAsync should set worker.CancellationPending. I haven't tested if it
returns true in the GUI thread, but it should definitely return true inside
the worker thread.

The below code sample should demonstrate how cancellation should work. It
will run a background worker for ten seconds unless cancelled by clicking the
"Cancel" button.

public partial class Form1 : Form
{
BackgroundWorker worker = new BackgroundWorker();
public Form5()
{
InitializeComponent();

worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.WorkerSupportsCancellation = true;

Button bt = new Button();
bt.Text = "Cancel";
Controls.Add(bt);
bt.Click += new EventHandler(bt_Click);

worker.RunWorkerAsync();
}

void bt_Click(object sender, EventArgs e)
{
worker.CancelAsync();
}

void worker_DoWork(object sender, DoWorkEventArgs e)
{
DateTime start = DateTime.Now;
BackgroundWorker worker = sender as BackgroundWorker;

while ((DateTime.Now - start).TotalSeconds < 10)
{
if (worker.CancellationPending)
{
MessageBox.Show("Cancelled");
return;
}
Thread.Sleep(1000);
}
MessageBox.Show("Finished");
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top