Background worker

Résolu
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014 - 18 août 2006 à 15:26
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 19 août 2006 à 19:47
Salut a tous !

Je souhaiterais executer en arrièreplan une void (AfficherRep()) lors de l'ouverture d'un form (GestionCharte_Load
).
Est ce que vous pouvez m'aider ? (Une petite barre de chargement en prime ne serait pas de refus !)

Je ne sais pas quoi choisir entre utiliser la classe background worker ou thread.
Est ce que ce serait possible d'avoir un petit exemple d'utilisation de ces classes ?
(Désolé, mais les exemples du msdn sont inexistant pour la classe backgroundworker, ou alors je l'ai pas trouvé, et pour la classe thread, je ne comprend pas l'exemple).

Merci d'avance ...

MMN

4 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
19 août 2006 à 10:32
Salut,

En utilisant les Thread, il n'y a rien de tres compliqué.
Tu lances ton Thread au demarrage au "lancement" de ta form.
Si tu veux qu'il y ait une barre de chargement (sur ta form ?), le mieux serait de lancer ton Thread lors du déclenchement de l'evenement HandleCreated. Et plutot que de recreer un Thread, utilises ceux du Pool de Threads.

En gros ca donnce ceci :
Dans le constructeur de ta Form :

this

.HandleCreated +=
new
EventHandler(StartScreenControl_HandleCreated);
La méthode HandleCreated :

private
void StartScreenControl_HandleCreated(
object sender,
EventArgs e)
{

   ThreadPool.QueueUserWorkItem(
new
WaitCallback(LaMethodeDeTonThread));
}

Et tu as la méthode de ton thread declarée ainsi :

private
void LaMethodeDeTonThread(
object state)
{
      // Ici tu fais ce que tu veux que ton thread fasse

}

Pour la barre de chargement, il te suffir dont de mettre une ProgressBar, et de "converser" avec via les méthodes BeginInvoke / EndInvoke. Ceci etant du au fait qu'un thread (ton worker) n'a pas le droit d'acceder directement aux propriétés d'un Control qu'un autre thread a créé (Ton thread principal).

Mx
MVP C# 
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 59
19 août 2006 à 10:00
Salut,
Voilà le link sur MSDN

<hr size="2" />VC# forever
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 59
19 août 2006 à 10:47
Bien modeste, il n'a même pas osé mettre une référence sur son super tutorial à propos des Invoke / BeginInvoke.
Voilà qui est fait

<hr size="2" />VC# forever
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
19 août 2006 à 19:47
Un peu pressé par le temps quand j'ai écrit le message

Merci Bidou

Mx
MVP C# 
0