C# 如何从静态类向label或backgroundworker报告进度?
使用它:C# 如何从静态类向label或backgroundworker报告进度?,c#,.net,winforms,C#,.net,Winforms,使用它: public class DirectoryIterator { public static int Iterate(string root) { var iterator = new DirectoryIterator(); iterator.iterate(root); return iterator.count;
public class DirectoryIterator
{
public static int Iterate(string root)
{
var iterator = new DirectoryIterator();
iterator.iterate(root);
return iterator.count;
}
private void iterate(string root)
{
try
{
foreach (string directory in Directory.EnumerateDirectories(root))
iterate(directory);
foreach (string file in Directory.EnumerateFiles(root, "*.txt"))
{
// load(file);
++count;
// Now count is the actual number of files processed,
// so you can use it for updateProgress()
}
}
catch
{
}
}
private int count;
private DirectoryIterator() { }
}
然后我可以报告计数,但这是在结束的过程。
我想报告两次进展情况。第一次获取目录时:
int count = DirectoryIterator.Iterate("C:\\temp\\");
要在此处向progresschanged事件报告目录名,还要计算目录数并实时报告计数
第二:
foreach (string directory in Directory.EnumerateDirectories(root))
iterate(directory);
在此实时报告文件名和文件数
问题是,因为它是静态的,所以我无法从类内部调用任何控件,而不是backgroundworker和labels。为静态
迭代方法添加回调参数。在实例iterate
方法中调用适当的回调函数,以通知调用方进度更新
在接受回调的DirectoryIterator
类上也需要一个私有构造函数。例如:
foreach (string file in Directory.EnumerateFiles(root, "*.txt"))
{
// load(file);
++count;
// Now count is the actual number of files processed,
// so you can use it for updateProgress()
}
publicstaticintiterate(字符串根,动作回调)
{
var iterator=newdirectoryinterator(回调);
iterator.iterate(根);
返回iterator.count;
}
如果您只需要报告当前的迭代计数,那么回调可以像操作一样简单。将回调参数添加到静态迭代方法中。在实例iterate
方法中调用适当的回调函数,以通知调用方进度更新
在接受回调的DirectoryIterator
类上也需要一个私有构造函数。例如:
foreach (string file in Directory.EnumerateFiles(root, "*.txt"))
{
// load(file);
++count;
// Now count is the actual number of files processed,
// so you can use it for updateProgress()
}
publicstaticintiterate(字符串根,动作回调)
{
var iterator=newdirectoryinterator(回调);
iterator.iterate(根);
返回iterator.count;
}
如果您只需要报告当前迭代计数,那么回调可以像操作一样简单