OVH Cloud OVH Cloud

[Vb.net 2005] - Threading.Thread

17 réponses
Avatar
TroXsA
Bonjour a tous
je sais pas trop me servire du System.Threading.Thread tout ce que je sais
faire avec c'est ça :


MyThread = New System.Threading.Thread(AddressOf NomFunction"Ou"Sub)
' Call sub procedure
MyThread.Start

J'ai fais une petite application avec plusieurs onglet
l'onglet 1 c'est la partie parametrage, onglet 2 c'est l'execution, et
l'onglet 3 c'est la partie pour voir si tout c'est bien executé

Le probleme ce pause dans l'onglet 2, l'ors de l'execution diverse
l'application ce bloque sur cet onglet je ne peu en changer durent le
traitement, il faut que toute les executions soit fini pour pouvoir naviguer
dans les Onglets

Peut on utiliser un system.threading.thread de facon que l'application ne ce
fige pas sur un onglet ?
ou alors je l'utilise mal ?


Merci

7 réponses

1 2
Avatar
TroXsA
C'est qu'elle que chose que je connais pas du tout !!!!

D'apres ce que vous dites 'il faut utiliser la methode Invoke de objet'
LvQueue.Invoke(???)
bon je vais peut etre arreter de vous embétez avec ces problemes et
rechercher par moi meme (c'est comme ça qu'on ce forme en forgeant)


Merci pour l'aide que vous m'avez apporté ! :) a bientot peut etre ! :)
Avatar
Julien Bakmezdjian [MS]
Bonjour,

Si LvQueue est bien le nom du contrôle à modifier, oui !
Je n'ai pas vérifié la syntaxe suivante (je suis plutôt un C#-iste), mais
l'idée devrait être là !

Vous créez quelque part dans votre classe un délégué :

Public Delegate Sub ChangeInterfaceDelegate(ByVal nouvelleValeur as
Integer)

Notre délégué ici présent prend en paramètre un int. A vous de mettre ce qui
vous intéresse (ie les infos nécessaires pour que le contrôle se mette à
jour).
Puis vous créez une méthode quelque part dans la classe qui correspond à la
signature de ce délégué (ici, une Sub avec un int en paramètre) :

Public Sub ChangeInterface(ByVal nouvelleValeur as Integer)
'travailler ici sur les contrôles en fonction des valeurs passées
End Sub

On instancie ensuite une "variable" du type de notre délégué :

Private maj as ChangeInterfaceDelegate
maj = New ChangeInterfaceDelegate(AddressOf ChangeInterface)

Enfin, depuis la méthode "de travail", vous appeler le .Invoke du contrôle :

Dim args as Object() = {16} 'valeur pour la mise à jour
LvQueue.Invoke(maj, args)

En espérant que cela marche et vous soit utile !

Julien

"TroXsA" a écrit dans le message de news:
ddcrir$s86$
C'est qu'elle que chose que je connais pas du tout !!!!

D'apres ce que vous dites 'il faut utiliser la methode Invoke de objet'
LvQueue.Invoke(???)
bon je vais peut etre arreter de vous embétez avec ces problemes et
rechercher par moi meme (c'est comme ça qu'on ce forme en forgeant)


Merci pour l'aide que vous m'avez apporté ! :) a bientot peut etre ! :)



Avatar
TroXsA
Il me semble que la version 2005 est planté dans la gestion des thread, j'ai
fait un example qui fonctionne tres tres bien sous Visual Basic 2003 et sous
la version de Vb.net 2005 ça fait une erreur ... tout comme mon code que
j'avais fais ...

*******************************************************
Opération inter-threads non valide : le contrôle 'txtResult' a fait l'objet
d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
*******************************************************

Je pense que sous la version 2005 il ne faut plus utiliser directement les
threads comme expliquer sur certain site mais utiliser directement l'objet
BackgroundWorker avec DoWork, quoi que des qu'il s'agit de modifier un
controle quel que soit sont types ça cree une ** Opération inter-threads non
valide **, il faut trouver une parade pour contré cette erreur !

donc .... A suivre
Avatar
c2i-Richard Clark
Non, au contraire, le .NET 2.0 ajoute des fonctionnalités de surveillance
pour être sur d'éviter ces pbs de synchronisation.
http://www.c2i.fr/code.aspx?IDCode`4

--
Richard Clark - MVP .NET
http://www.project-hoshimi.com
http://www.c2i.fr
"TroXsA" a écrit dans le message de news:
ddd0kn$v9e$
Il me semble que la version 2005 est planté dans la gestion des thread,
j'ai fait un example qui fonctionne tres tres bien sous Visual Basic 2003
et sous la version de Vb.net 2005 ça fait une erreur ... tout comme mon
code que j'avais fais ...

*******************************************************
Opération inter-threads non valide : le contrôle 'txtResult' a fait
l'objet d'un accès à partir d'un thread autre que celui sur lequel il a
été créé.
*******************************************************

Je pense que sous la version 2005 il ne faut plus utiliser directement les
threads comme expliquer sur certain site mais utiliser directement l'objet
BackgroundWorker avec DoWork, quoi que des qu'il s'agit de modifier un
controle quel que soit sont types ça cree une ** Opération inter-threads
non valide **, il faut trouver une parade pour contré cette erreur !

donc .... A suivre



Avatar
TroXsA
tien tien je connais ce nom "Richard Clark" :D
Je suis ravi qu'il existe une solution, je vais tester tout ça et je reviens
pour confirmer :)

Question a par : tu serais quand c'êtes ouvrage (
http://www.microsoft.com/mspress/books/7653.asp ) sera sortie en version
Francaise ?



Merci

@+
Avatar
TroXsA
Sa fonction terible merci beaucoup Richard C. :p
Avatar
c2i-Richard Clark
Heu..., en français SVP ;-)))
Toi quoi dire ?

--
Richard Clark - MVP .NET
http://www.project-hoshimi.com
http://www.c2i.fr
"TroXsA" a écrit dans le message de news:
ddda3r$4q4$
tien tien je connais ce nom "Richard Clark" :D
Je suis ravi qu'il existe une solution, je vais tester tout ça et je
reviens pour confirmer :)

Question a par : tu serais quand c'êtes ouvrage (
http://www.microsoft.com/mspress/books/7653.asp ) sera sortie en version
Francaise ?



Merci

@+



1 2