c#在扫描directores及其子文件夹时使用BackgroundWorker
我在c#中有一个简单的代码,它可以找到所有正在工作的目标目录及其子文件夹,但在处理过程中,我无法与GUI表单交互,我需要使用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
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);
}
我试过了,没用,循环只会用一次,然后停止