c#在扫描directores及其子文件夹时使用BackgroundWorker

c#在扫描directores及其子文件夹时使用BackgroundWorker,c#,directory,backgroundworker,C#,Directory,Backgroundworker,我在c#中有一个简单的代码,它可以找到所有正在工作的目标目录及其子文件夹,但在处理过程中,我无法与GUI表单交互,我需要使用BackgroundWorker如何使用此代码实现: var dir = textBox1.Text = folderBrowserDialog1.SelectedPath; textBox2.Text=""; string[] extensions = { ".htm", ".html" }; var files = Directory.Enumerat

我在c#中有一个简单的代码,它可以找到所有正在工作的目标目录及其子文件夹,但在处理过程中,我无法与GUI表单交互,我需要使用BackgroundWorker如何使用此代码实现:

  var dir = textBox1.Text = folderBrowserDialog1.SelectedPath; 
  textBox2.Text="";
  string[] extensions = { ".htm", ".html" };
  var files = Directory.EnumerateFiles(dir, "*.*",SearchOption.AllDirectories)
  .Where(s => s.EndsWith(".html") || s.EndsWith(".htm")).OrderBy(f => f);

                 foreach (string file in files)
                 { System.Diagnostics.Debug.WriteLine(file);
                   textBox2.AppendText(file+Environment.NewLine);
                 } 

你读过这个链接吗?注意从其他线程更新gui(对于BackgroundWorker,这通常在ProgressChanged事件处理程序中完成:

更不用说我找到了解决方案:

    void BackgroundWorker1DoWork(object sender, DoWorkEventArgs e)
    {  
          string[] extensions = { ".htm", ".html" };
          var files = Directory.EnumerateFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories)
         .Where(s => s.EndsWith(".html") || s.EndsWith(".htm")).OrderBy(f => f);


          foreach (string file in files)
           {  
            Thread.Sleep(5);
            System.Diagnostics.Debug.WriteLine(file);
              backgroundWorker1.ReportProgress(0,file+Environment.NewLine);
           }


    }
    void BackgroundWorker1ProgressChanged(object sender, ProgressChangedEventArgs e)
    {

      textBox2.AppendText(e.UserState as string);

    }

我试过了,没用,循环只会用一次,然后停止