2013-05-08 2 views
0

J'ai créé une bibliothèque de classes dans mon projet qui analyse une série de fichiers. Dans mon projet principal qui utilise cette DLL comme référence, je voudrais créer une barre de progression qui montre combien de fichiers ont été scannés jusqu'à présent.Exécution de deux fonctions en même temps en C#

La classe dll utilise une boucle foreach car son but est de transformer chaque fichier en un code de hachage. La boucle foreach a été utilisée pour joindre chaque segment converti d'un fichier afin que je puisse avoir un code long de 512 bits, puis il passe au fichier suivant.

I ont défini une variable dans la classe dll qui est ->

public static int value_ = 0; 

Cette variable est mise à jour à la fin de la boucle foreach.

Maintenant, dans mon projet principal, j'aimerais utiliser cette variable pour mettre à jour ma barre de progression en même temps que la fonction dans mon projet de bibliothèque de classes.

Par exemple:

DLL.function(); 
pb.value = value_; 

Je vous remercie de tout soupçon sur la façon dont je peux mettre en œuvre.

+9

essentiellement, tout type de filetage. 'BackgroundWorker',' Task', 'ThreadPool',' Thread', etc. Peut-être commencer par les exemples MSDN pour 'BackgroundWorker'. –

+0

La variable est mise à jour à la fin de chaque ITERATION de la foreach, ou après l'exécution de la boucle foreach? –

+0

Après chaque itération de la boucle foreach – JAX

Répondre

3

Vous pouvez utiliser un Background Worker pour faire du travail et signaler des progrès.

worker.WorkerReportsProgress = true; 

Et maintenant vous pouvez faire en sorte que ce rapport d'avancement soit déclenché par un événement auquel vous êtes abonné.

worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); 

Ce faisant, vous pouvez créer une barre de progression que peut se mettre à jour en fonction de cet événement worker_ProgressChanged, déclenché par votre méthode.

0

Votre programme principal devra appeler votre fonction en utilisant un fil, le Background Worker peut vous aider avec ceci.

Pour mettre à jour la barre de progression, vous devez regarder les événements et les déléguer. Chaque fois que vous traitez un objet, vous pouvez déclencher un événement. Ensuite, votre programme principal pourrait gérer cet événement et mettre à jour la barre de progression.

+0

Cela ne fonctionnerait pas, car tout fonctionnerait toujours sur le même thread. – Steve

Questions connexes