C#背景工人问题

C#背景工人问题,c#,backgroundworker,C#,Backgroundworker,我有一名背景工作人员,主要负责以下工作: 找到下一个可用文件并将其标记为“正在处理” 处理该文件并将更新的版本另存为新文件 将原件标记为已处理 当有文件要处理时,上述步骤需要循环并继续处理 我希望后台工作程序能够停止,并且我看到WorkerSupportsScanCellation设置,但是如何确保它只能在文件之间停止,而不能在处理文件时停止?将WorkerSupportsScanCellation设置为true,并定期检查DoWork事件处理程序中的CancellationPending属性

我有一名背景工作人员,主要负责以下工作:

  • 找到下一个可用文件并将其标记为“正在处理”
  • 处理该文件并将更新的版本另存为新文件
  • 将原件标记为已处理
  • 当有文件要处理时,上述步骤需要循环并继续处理


    我希望后台工作程序能够停止,并且我看到WorkerSupportsScanCellation设置,但是如何确保它只能在文件之间停止,而不能在处理文件时停止?

    WorkerSupportsScanCellation
    设置为true,并定期检查
    DoWork
    事件处理程序中的
    CancellationPending
    属性

    CancelAsync
    方法仅设置
    CancellationPending
    属性。它不会杀死线程;这取决于员工对取消请求的响应

    e、 g:


    您必须在文件处理结束时检查后台工作程序的CancellationPending Proceptiy

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

    你会希望看到下面的答案,因为它更完整。
        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;
                        }
                    }
                }