我试图报告每个找到的文件在循环中的进度时,文件是得到添加到FilesFound列表报告的文件名到progresschanged和progresschanged显示标签上的文件名。
循环方法
private void SearcherCore(string sDir)
{
try
{
foreach (var directory in Directory.GetDirectories(sDir))
{
foreach (var filename in Directory.GetFiles(directory))
{
using (var streamReader = new StreamReader(filename))
{
var contents = streamReader.ReadToEnd().ToLower();
if (contents.Contains(SearchText))
{
FilesFound.Add(filename);
}
}
}
SearcherCore(directory);
}
}
catch (System.Exception ex)
{
}
}
多沃克事件
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
if (textBoxSearchDirectory.Text != "")
{
SearcherCore(textBoxSearchDirectory.Text);
}
}
progresschanged事件仍然没有代码。
1条答案
按热度按时间zdwk9cvp1#
BackGroundWorker.ReportProgress
方法将会很有用。您可以使用以int
和object
为参数的多载。因此,当您找到一个文件时,可以执行以下操作:
backgroundWorker1.ReportProgress(0, filename);
(so这将放在
FilesFound.Add(filename);
行下面。0
就是percentProgress
,在本例中您似乎并不关心它.然后您将实现
backgroundWorker1_ProgressChanged
事件。要获取文件名,可以使用ProgressChangedEventArgs
的UserState
属性。