在后台工作事件中,我调用了这个方法:
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>();
backgroundWorker1.ReportProgress(0, "Counting Files");
CountFiles(di, l);
}和CountFiles方法:
private void CountFiles(DirectoryInfo di, List<FileInfo> l)
{
try
{
l.AddRange(di.EnumerateFiles());
}
catch
{
}
try
{
IEnumerable<DirectoryInfo> subDirs = di.EnumerateDirectories();
if (subDirs.Count() > 0)
{
foreach (DirectoryInfo dir in subDirs)
CountFiles(dir, l);
}
}
catch
{
string err = "";
}
}这是progresschanged evet:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.UserState.ToString() == "Counting Files")
label2.Text = e.UserState.ToString();
}计算文件的时间大约需要2-4秒。在这一次,我向用户显示了一条消息,它现在正在计算文件数,但是如果我想在label3上显示文件的实时计数,我该怎么做呢?我想我需要以某种方式从CountFiles方法内部报告进度?
发布于 2016-03-12 12:41:32
将第一个CountFiles调用更改为:
CountFiles(di, l, count=> {
backgroundWorker1.ReportProgress(count, "Files Found...");
});将CountFiles方法更改为:
private void CountFiles(DirectoryInfo di, List<FileInfo> l, Action<int> CurrentCount) {
...
foreach (DirectoryInfo dir in subDirs)
CountFiles(dir, l, currentCount=> {
CurrentCount(l.Count);
});
}https://stackoverflow.com/questions/35953277
复制相似问题