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;
}
如果您只需要报告当前迭代计数,那么回调可以像
操作一样简单