下面是一种我想发送给后台工作人员的方法,但我正在努力根据我的方法的创建方式来实现它。如您所知,它不会返回任何可以的内容,但每次调用它时都需要一个 directoryInfo 对象。
private void getSizeForTargetDirectory(DirectoryInfo dtar)
{
// generate a collection of objects. files comes first and then directories.
foreach (Object item in collection )
{
if (item == file)
{
track the size of the files as you encounter.
}
else if (item == directory)
{
// found a new directory, recall the method. !!!
}
}
}
这是我第一次使用后台工作人员,所以我有点卡住了,由于在这里找到的帮助,我尝试实现一些东西,但是当我意识到我的方法是递归的时就卡住了。
我实现了一个 doWork 事件处理程序方法,但注意到如果我有更多文件和文件夹要在较低的子级别上处理,我需要以某种方式调用该方法。
我有一个简单的按钮单击事件处理程序,当当前选定的节点是目录时,它调用我的“getSizeForTargetDirectory()”方法。
private void retrieveInfoButton_Click(object sender, EventArgs e)
{
// check to see if the path is valid
// reset the labels and textfields.
string fullPath = treeDrives.SelectedNode.FullPath;
string sNodesName = treeDrives.SelectedNode.Text;
if (directory) // Enter here if its a directory.
{
string parentPath = treeDrives.SelectedNode.Parent.FullPath;
DirectoryInfo[] dirArray = populateFoldersArray(parentPath);
for (int i = 0; i < dirArray.Length; i++)
{
if (dirArray[i].Name == sNodesName)
{
getSizeForTargetDirectory(dirArray[i]);
// do work !
希望这能解释我想要做什么以及我是如何做到的。问题是当我尝试交付的大部分工作来自递归方法时,我如何使用后台工作人员类的报告进度功能。
通过早期测试,我注意到我的 getSize 方法在经过一些调整后非常有效,并且非常快速地报告了当前提供的文件夹的大小信息,但是我再次使用了功能强大的开发机器,因此这可能不适用于所有用户。
感谢阅读,希望有人能帮忙!!!