Ниже приведен метод, который я хочу отправить в фоновый рабочий процесс, но я изо всех сил пытаюсь сделать это, основываясь на том, как создан мой метод. Как вы можете, он ничего не возвращает, что нормально, но он ожидает объект 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 был невероятно эффективным после нескольких настроек и очень быстро сообщал информацию о размере текущей предоставленной папки, но опять же, я использую довольно мощную машину для разработки, поэтому это может быть верно не для всех пользователей.
Спасибо за чтение, надеюсь, кто-то может помочь !!!