我在* .cs文件的目錄中搜索特定的字符串。 如果我將它添加到列表視圖中。 但是,當它將結果添加到列表視圖我沒有看到CS文件名字符串被發現,但其他東西。爲什麼添加到列表視圖項目時,結果不是文件名?
在BackgroundWorker的DoWork的事件
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
FindLines(@"d:\c-sharp", "simplecontextmenu");//"string s1 = treeView1.SelectedNode.Tag as string;");
}
這是FindLines代碼
bool result = false;
public List<string> FindLines(string DirName, string TextToSearch)
{
int counter = 0;
List<string> findLines = new List<string>();
DirectoryInfo di = new DirectoryInfo(DirName);
List<FileInfo> l = new List<FileInfo>();
CountFiles(di, l);
int totalFiles = l.Count;
int countFiles = 0;
if (di != null && di.Exists)
{
if (CheckFileForAccess(DirName) == true)
{
foreach (FileInfo fi in l)
{
backgroundWorker1.ReportProgress((int)((double)countFiles/totalFiles * 100.0), fi.Name);
countFiles++;
System.Threading.Thread.Sleep(1);
if (string.Compare(fi.Extension, ".cs", true) == 0)
{
using (StreamReader sr = fi.OpenText())
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
if (s.Contains(TextToSearch))
{
counter++;
findLines.Add(s);
result = true;
backgroundWorker1.ReportProgress(0, s);
}
}
}
}
}
}
}
return findLines;
}
這是BackgroundWorker的progresschanged事件
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label2.Text = e.UserState.ToString();
if (result == true)
{
listView1.Items.Add(e.UserState.ToString());
result = false;
}
}
一些與在FindLines方法ReportProgress並在progresschanged事件中使用e.UserState是錯的。我沒有得到在列表視圖中找到字符串的cs文件的路徑和名稱。
我在這個目錄中搜索字符串「simplecontextmenu」,如果字符串在目錄中的任何一個cs文件中,我想添加到listview中的文件名字符串在該目錄中找到例如,如果串在test.cs中找到,那麼在列表視圖告訴我:
C:\ mytest的\ test.cs中「simplecontextmenu」
但我得到的卻是該行自它從代碼是什麼我在listview中看到的是:FindLines(@「d:\ c-sharp」,「simplecontextmenu」); //「string s1 = treeView1.SelectedNode.Tag as string;」);