Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Background Worker Question

I have a background worker that does basically the following:

  1. Find next available file and mark it as in process
  2. Process the file and save the updated version as a new file
  3. Mark the original as processed

The above steps will need to loop and continue processing while there are files to process.

I would like the Background Worker to be able to be stopped, and I see the WorkerSupportsCancellation setting, but how do I ensure that it can only stop between files, not while a file is being processed?

like image 482
Shane Grant Avatar asked Jun 07 '11 14:06

Shane Grant


1 Answers

Set WorkerSupportsCancellation to true, and periodically check the CancellationPending property in the DoWork event handler.

The CancelAsync method only sets the CancellationPending property. It doesn't kill the thread; it's up to the worker to respond to the cancellation request.

e.g.:

private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    while( !myBackgroundWorker.CancellationPending )
    {
        // Process another file
    }
}
like image 124
Sven Avatar answered Sep 21 '22 18:09

Sven