OVH Cloud OVH Cloud

BackgroundWorker1_DoWork un légé prise de tete non ?

7 réponses
Avatar
TroXsA - [VB.NET-2005]
Salut a tous

Je recherche sur le net comment fonctionne le
BackgroundWorker, tout le monde dit, c'est génial
et qu'il facile la vie avec ce nouveau composant,
personnellement je trouve un peut le concept prise
de tete et meme tres prise de tete sur la comprehention
et le fonctionnement du compossant ... pas d'exemple
simple

Voila ce que je recherche a faire
j'ai une listview avec 6000 lignes, les lignes sont traités
une par une en fonction du traitement une fois traité j'efface
l'index de ma listview """LvQueue.Items.RemoveAt(0)"""" ext ext ...
si je met pas de thread mon application ce bloque t'en que
le code n'est pas fini, j'ai mis l'ancienne fonction threading
qui fonctionne tres bien, mais ce que je recherche c'est de
le faire avec le nouveau compossant soit dissant mortel ...
BackgroundWorker ne modifi pas les controles (directement)
on est vraiment obligé de ce tordre la tete pour pouvoir faire
les choses, 3 evenements pour lui dire la tu fais ça, ici tu fais cela ....
Microsoft pourrais quand meme faire un peux plus d'exemple que
ça sur leurs MSDN, avec toute leurs nouvelles fonctionnalitées
en tout cas il y a de gros effort a faire avec le thread (multi ou pas)
a quand l'automatisme des thread ?


--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl

7 réponses

Avatar
Guillaume Davion
Je ne vois pas ce que le BackgroundWorker a de compliqué, et l'exemple
fourni dans la MSDN est assez simple...

Tu mets ton code dans l'événement DoWork (ou dans une fonction qui y
est appelé).

A chaque itération, tu vérifies qu'il n'y a pas une annulation en
attente, auquel cas tu fais ce qu'il faut pour la gérer proprement et
tu arrêtes ton traitement

Toujours à chaque itération, tu peux appeler ReportProgress, pour
tenir le monde extérieur informé de la progression de ton thread.

Éventuellement, tu gère l'événement ProgressChanged, par exemple en
mettant à jour une barre de progression, cet évènement est appelé
à chaque fois que tu fait un appel à la méthode ReportProgress, elle
fait le pont entre le thread d'exécution de ton traitement et ta
winform.

Et quand le traitement est fini, tu gère l'évènement
RunWorkerCompleted pour faire le nettoyage.


C'est peut-être un poil plus compliqué que de faire un thread tout
con, mais au moins, tu es sûr que tout est géré proprement, et que
tu n'auras (à priori) pas de deadlock.
Le code généré quand tu implémentes l'événement DoWork est
d'ailleurs clair la dessus : ne rien utiliser d'externe à cette
méthode, pour éviter tout pépin.
Tu passe en paramètre ce qui est nécessaire dans la méthode
RunWorkerAsynch, et tu mets le résultat en sortie la où il faut dans
la gestion de l'événement RunWorkerCompleted.


Je ne sais pas si j'ai été clair, mais j'ai fait de mon mieux ;)
Avatar
c2i-Richard Clark
http://www.c2i.fr/code.aspx?IDCodea2

--
Richard Clark - MVP .NET
http://www.project-hoshimi.com
http://www.c2i.fr
"TroXsA - [VB.NET-2005]" a écrit dans le message de
news: df1uaf$8f9$
Salut a tous

Je recherche sur le net comment fonctionne le
BackgroundWorker, tout le monde dit, c'est génial
et qu'il facile la vie avec ce nouveau composant,
personnellement je trouve un peut le concept prise
de tete et meme tres prise de tete sur la comprehention
et le fonctionnement du compossant ... pas d'exemple
simple

Voila ce que je recherche a faire
j'ai une listview avec 6000 lignes, les lignes sont traités
une par une en fonction du traitement une fois traité j'efface
l'index de ma listview """LvQueue.Items.RemoveAt(0)"""" ext ext ...
si je met pas de thread mon application ce bloque t'en que
le code n'est pas fini, j'ai mis l'ancienne fonction threading
qui fonctionne tres bien, mais ce que je recherche c'est de
le faire avec le nouveau compossant soit dissant mortel ...
BackgroundWorker ne modifi pas les controles (directement)
on est vraiment obligé de ce tordre la tete pour pouvoir faire
les choses, 3 evenements pour lui dire la tu fais ça, ici tu fais cela
....
Microsoft pourrais quand meme faire un peux plus d'exemple que
ça sur leurs MSDN, avec toute leurs nouvelles fonctionnalitées
en tout cas il y a de gros effort a faire avec le thread (multi ou pas)
a quand l'automatisme des thread ?


--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl



Avatar
TroXsA - [VB.NET-2005]
Merci pour le lien, j'avais deja vu cette exemple mais
je n'est pas ete capable de le tradure en vb.net en totalité ...


--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl
Avatar
TroXsA - [VB.NET-2005]
Oui j'ai compris mais pas facile a faire quand meme

J'ai ce code la a mettre dans un thread BackgroundWorker
- dans un thread a l'ancienne pas de probleme j'arrive a le faire ...

Do While Not (LvQueue.Items.Count) = 0
LvQueue.Items.Item(0).SubItems.Item(2).Text = "En execution"
TaskCommmand = names.Peek.ToString()
TaskExecutShell()
SubItemLvTrack = LvTrack.Items.Add(LvQueue.Items.Item(0).Text)
SubItemLvTrack.SubItems.Add(LvQueue.Items.Item(0).SubItems.Item(1).Text)
SubItemLvTrack.SubItems.Add(ListViewResultat)
LvQueue.Items.RemoveAt(0)
TabPage2.Text = "Batch (" & LvQueue.Items.Count & ")"
'Ma sortie
If names.Count = 0 Then
Exit Do
End If
Loop


Dès qu'il y a modifications d'un controle, Label, TextBox, ListBox,
ListView .... ect ect ... ça plante

Je sais que j'y prend tres mal sur l'utilisation BackgroundWorker, et
que j'ai pas tout compris a son fonctionnement, mais avec vos aides
ça devrai aller, enfin j'espere ...


Merci



--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl
Avatar
Eric Vernié [MS]
Salut TroXsa,

J'ai fait quelques Videos qui expliquent le fonctionnement et qui seront
disponibles très bientot sur
www.microsoft.com/france/vbasic
J'espère qu'elles pourront aider.

Cordialement

Eric Vernié
Microsoft France

"TroXsA - [VB.NET-2005]" wrote in message
news:df1uaf$8f9$
Salut a tous

Je recherche sur le net comment fonctionne le
BackgroundWorker, tout le monde dit, c'est génial
et qu'il facile la vie avec ce nouveau composant,
personnellement je trouve un peut le concept prise
de tete et meme tres prise de tete sur la comprehention
et le fonctionnement du compossant ... pas d'exemple
simple

Voila ce que je recherche a faire
j'ai une listview avec 6000 lignes, les lignes sont traités
une par une en fonction du traitement une fois traité j'efface
l'index de ma listview """LvQueue.Items.RemoveAt(0)"""" ext ext ...
si je met pas de thread mon application ce bloque t'en que
le code n'est pas fini, j'ai mis l'ancienne fonction threading
qui fonctionne tres bien, mais ce que je recherche c'est de
le faire avec le nouveau compossant soit dissant mortel ...
BackgroundWorker ne modifi pas les controles (directement)
on est vraiment obligé de ce tordre la tete pour pouvoir faire
les choses, 3 evenements pour lui dire la tu fais ça, ici tu fais cela
....
Microsoft pourrais quand meme faire un peux plus d'exemple que
ça sur leurs MSDN, avec toute leurs nouvelles fonctionnalitées
en tout cas il y a de gros effort a faire avec le thread (multi ou pas)
a quand l'automatisme des thread ?


--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl



Avatar
TroXsA - [VB.NET-2005]
Merci beaucoup :)
je pense que ça servira a pas mal de monde ...

--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl



"Eric Vernié [MS]" a écrit dans le message de
news:
Salut TroXsa,

J'ai fait quelques Videos qui expliquent le fonctionnement et qui seront
disponibles très bientot sur
www.microsoft.com/france/vbasic
J'espère qu'elles pourront aider.

Cordialement

Eric Vernié
Microsoft France

"TroXsA - [VB.NET-2005]" wrote in message
news:df1uaf$8f9$
Salut a tous

Je recherche sur le net comment fonctionne le
BackgroundWorker, tout le monde dit, c'est génial
et qu'il facile la vie avec ce nouveau composant,
personnellement je trouve un peut le concept prise
de tete et meme tres prise de tete sur la comprehention
et le fonctionnement du compossant ... pas d'exemple
simple

Voila ce que je recherche a faire
j'ai une listview avec 6000 lignes, les lignes sont traités
une par une en fonction du traitement une fois traité j'efface
l'index de ma listview """LvQueue.Items.RemoveAt(0)"""" ext ext ...
si je met pas de thread mon application ce bloque t'en que
le code n'est pas fini, j'ai mis l'ancienne fonction threading
qui fonctionne tres bien, mais ce que je recherche c'est de
le faire avec le nouveau compossant soit dissant mortel ...
BackgroundWorker ne modifi pas les controles (directement)
on est vraiment obligé de ce tordre la tete pour pouvoir faire
les choses, 3 evenements pour lui dire la tu fais ça, ici tu fais cela
....
Microsoft pourrais quand meme faire un peux plus d'exemple que
ça sur leurs MSDN, avec toute leurs nouvelles fonctionnalitées
en tout cas il y a de gros effort a faire avec le thread (multi ou pas)
a quand l'automatisme des thread ?


--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl







Avatar
TroXsA - [VB.NET-2005]
Pardon de relancer le sujet mais je vois toujours pas d'exemple !
pourtant j'ai bien recherché ou alors je suis pas au bonne endroit ?
c'est peut être encore un peut tôt ?
pourriez vous me dire quand celle ci seront disponible ?

@bientot :)

--
TroXsA
http://cerbermail.com/?rIXgaw9Xsl



"Eric Vernié [MS]" a écrit dans le message de
news:
Salut TroXsa,

J'ai fait quelques Videos qui expliquent le fonctionnement et qui seront
disponibles très bientot sur
www.microsoft.com/france/vbasic
J'espère qu'elles pourront aider.

Cordialement

Eric Vernié
Microsoft France