开发者

C# Background Worker Question

开发者 https://www.devze.com 2023-03-10 19:52 出处:网络
I have a background worker that does basically the following: Find next available file and mark it as in process

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 s开发者_如何学编程ave 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?


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
    }
}


You have to check CancellationPending procepty of background worker at the end of file processing

    static void Main(string[] args)
            {
                BackgroundWorker bw = new BackgroundWorker();
                bw.DoWork += new DoWorkEventHandler(bw_DoWork);
                bw.WorkerSupportsCancellation = true;
                bw.RunWorkerAsync();
                Thread.Sleep(5000);
                bw.CancelAsync();
                Console.ReadLine();
            }

            static void bw_DoWork(object sender, DoWorkEventArgs e)
            {
                string[] files = new string[] {"", "" };
                foreach (string file in files)
                { 
                    if(((BackgroundWorker)sender).CancellationPending)
                    {
                        e.Cancel = true;
                        //set this code at the end of file processing
                        return;
                    }
                }
            }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号