Voici une méthode que je souhaite expédier dans un environnement de travail d'arrière-plan, mais j'ai du mal à la faire en fonction de la méthode créée. Comme vous le pouvez, il ne renvoie rien qui soit correct mais attend un objet directoryInfo chaque fois qu'il est rappelé.Utilisation d'un travailleur en arrière-plan - Mise à jour d'un ProgressBar sur la progression d'une méthode récursive
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. !!!
}
}
}
Ceci est ma première fois à l'aide d'un travailleur de fond, donc je suis un peu coincé, j'ai essayé quelque chose mise en œuvre grâce à l'aide trouvée ici, mais quand je me suis coincé réalisé ma méthode était récursive.
How do I display progress during a busy loop?
I mis en œuvre une méthode de gestionnaire d'événements DoWork mais on a remarqué que je avais besoin de rappeler en quelque sorte la méthode si j'avais plusieurs fichiers et dossiers à traiter sur les niveaux de sous inférieurs.
J'ai un simple gestionnaire d'événements de clic de bouton qui appelle ma méthode 'getSizeForTargetDirectory()' lorsque le noeud sélectionné est un répertoire.
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 !
Espérons que cela explique ce que j'essaie de faire et comment je le fais. La question est de savoir comment puis-je utiliser la fonctionnalité de progression du rapport de la classe de travailleurs en arrière-plan lorsque la majeure partie du travail que j'essaie d'expédier provient d'une méthode récursive. Grâce aux tests précoces, j'ai remarqué que ma méthode getSize était incroyablement efficace après quelques ajustements et des informations de taille rapportées pour le dossier actuellement fourni, mais j'utilise une machine de développement assez puissante, ce qui peut ne pas être vrai pour tous les utilisateurs .
Merci pour la lecture, j'espère que quelqu'un peut aider !!!
Bonjour cecil ... question? C'est un morceau de code intéressant ... cela signifie-t-il que d'un objet directoryInfo donné je peux utiliser les options de recherche pour retourner tous les fichiers sous un répertoire donné? Dans les deux cas, je vais devoir essayer ça car ça change tout !!! – IbrarMumtaz
Oui. Et cela n'augmente pas le temps d'exécution si vous comptez énumérer chaque fichier de toute façon. –
Très utile. Implémenté dans WPVM MVVM et fonctionnant magnifiquement. –