OVH Cloud OVH Cloud

est-ce normal ??

12 réponses
Avatar
Titeuf
Bonjour,

j'ai une fonction toute simple (en bas) qui ne recoit rien et qui ne
retourne rien.
je créer un thread pour cette fonction et le démarre :

dim tThread as new thread(addressof test)
tThread.Start()


mais j'obtient une erreur dans ma fonction lors de l'execution.
au niveau des form1.progressbar1
en gros le débuggeur me dit qu'il faut créer une nouvelle instance pour cet
objet !

J'ai fait un autre test avec la meme fonction mais sans passer ma fonction à
un thread
Et la sa marche je n'ai pas l'erreur !

J'en conclu que cela vient du fait que ma fonction tourne dans un thread
mais je ne sais pas comment contourner le problème.
Si quelqu'un a une petite idée j'en serait ravis :)
Merci d'avance


'-----------------------------
'fonction test
'-----------------------------
public sub test()

dim i as integer

form1.progressbar1.maximum= 1000000
for i = 0 to 1000000
form1.progressbar1.value = i
next

10 réponses

1 2
Avatar
TroXsA
Tu utilises la version 2005 ?
dans ce cas la oui c'est normal j'ai eu le meme probleme, la conclusion que
j'ai faite c'est : du moment que le thread agit sur un controle, ça plante

regarde ce lien tu trouveras peut etre ce que tu recherche ....
http://groups.google.fr/group/microsoft.public.fr.dotnet.vb/browse_thread/thread/61e52402c1a24535/9e3e71ce1a4320b7?hl=fr#9e3e71ce1a4320b7

Maintenant si tu utilise la version 2002 ou 2003, je sais pas trop te dire
car j'avais jamais fait de thread avant la version 2005 :p

@+
Avatar
Titeuf
oui effectivement j'utilise la beta 2 de vb2005 !
la solution de richard clark me semble bonne reste à tester
http://www.c2i.fr/code.aspx?IDCode`4
quelqu'un peut-il me donner son avis ?

"TroXsA" a écrit dans le message de news:
ddf77l$kst$
Tu utilises la version 2005 ?
dans ce cas la oui c'est normal j'ai eu le meme probleme, la conclusion
que j'ai faite c'est : du moment que le thread agit sur un controle, ça
plante

regarde ce lien tu trouveras peut etre ce que tu recherche ....
http://groups.google.fr/group/microsoft.public.fr.dotnet.vb/browse_thread/thread/61e52402c1a24535/9e3e71ce1a4320b7?hl=fr#9e3e71ce1a4320b7

Maintenant si tu utilise la version 2002 ou 2003, je sais pas trop te dire
car j'avais jamais fait de thread avant la version 2005 :p

@+



Avatar
Patrice
Toujours indiquer le message d'erreur exact...

Pour la mise à jour de contrôle à partir d'une autre thread voir par exemple
:
http://www.c2i.fr/code.aspx?IDCode`4

--
Patrice

"Titeuf" a écrit dans le message de
news:
Bonjour,

j'ai une fonction toute simple (en bas) qui ne recoit rien et qui ne
retourne rien.
je créer un thread pour cette fonction et le démarre :

dim tThread as new thread(addressof test)
tThread.Start()


mais j'obtient une erreur dans ma fonction lors de l'execution.
au niveau des form1.progressbar1
en gros le débuggeur me dit qu'il faut créer une nouvelle instance pour


cet
objet !

J'ai fait un autre test avec la meme fonction mais sans passer ma fonction


à
un thread
Et la sa marche je n'ai pas l'erreur !

J'en conclu que cela vient du fait que ma fonction tourne dans un thread
mais je ne sais pas comment contourner le problème.
Si quelqu'un a une petite idée j'en serait ravis :)
Merci d'avance


'-----------------------------
'fonction test
'-----------------------------
public sub test()

dim i as integer

form1.progressbar1.maximum= 1000000
for i = 0 to 1000000
form1.progressbar1.value = i
next




Avatar
TroXsA
> oui effectivement j'utilise la beta 2 de vb2005 !
la solution de richard clark me semble bonne reste à tester
http://www.c2i.fr/code.aspx?IDCode`4
quelqu'un peut-il me donner son avis ?




ça fonctionne tres tres bien, je n'est eu aucun probleme a traduire le C# en
Vb.net
@+
Avatar
Titeuf
le message d'erreur que j'obtenais n'étais pas le même que le tiens mais
pense tu qu'avec delegate et invoke cela va régler le probleme ?
car je ne peux tester avec ma fonction test et mon thread je n'ai pas vb.net
sur le pc ou je me trouve


"Patrice" a écrit dans le message de news:

Toujours indiquer le message d'erreur exact...

Pour la mise à jour de contrôle à partir d'une autre thread voir par
exemple
:
http://www.c2i.fr/code.aspx?IDCode`4

--
Patrice

"Titeuf" a écrit dans le message de
news:
Bonjour,

j'ai une fonction toute simple (en bas) qui ne recoit rien et qui ne
retourne rien.
je créer un thread pour cette fonction et le démarre :

dim tThread as new thread(addressof test)
tThread.Start()


mais j'obtient une erreur dans ma fonction lors de l'execution.
au niveau des form1.progressbar1
en gros le débuggeur me dit qu'il faut créer une nouvelle instance pour


cet
objet !

J'ai fait un autre test avec la meme fonction mais sans passer ma
fonction


à
un thread
Et la sa marche je n'ai pas l'erreur !

J'en conclu que cela vient du fait que ma fonction tourne dans un thread
mais je ne sais pas comment contourner le problème.
Si quelqu'un a une petite idée j'en serait ravis :)
Merci d'avance


'-----------------------------
'fonction test
'-----------------------------
public sub test()

dim i as integer

form1.progressbar1.maximum= 1000000
for i = 0 to 1000000
form1.progressbar1.value = i
next








Avatar
Patrice
Le code ne marchera pas car les contrôles doivent de toute façon être mis à
jour à partir de la thread qui a servi à leur création. Par contre le
message que tu évoques n'avait pas l'air de correspondre à cela d'où
effectivement ma demande. D'un autre côté cela marche lorsque tu appelles
directement cela semble donc bien lié au threading ?!

VS.NET 2005 propose un composant. peut-être à voir quel est le code qu'il
génère.

Il peut-être utile aussi de signaler simplement le progrès de la thread sans
s'occuper de la mise à jour elle-même ce qui permettrait par exemple de ne
pas rendre le traitement totalement dépendant de l'interface utilisateur qui
le lance...

Bon courage.

--
Patrice

"Titeuf" a écrit dans le message de
news:
le message d'erreur que j'obtenais n'étais pas le même que le tiens mais
pense tu qu'avec delegate et invoke cela va régler le probleme ?
car je ne peux tester avec ma fonction test et mon thread je n'ai pas


vb.net
sur le pc ou je me trouve


"Patrice" a écrit dans le message de news:

> Toujours indiquer le message d'erreur exact...
>
> Pour la mise à jour de contrôle à partir d'une autre thread voir par
> exemple
> :
> http://www.c2i.fr/code.aspx?IDCode`4
>
> --
> Patrice
>
> "Titeuf" a écrit dans le message de
> news:
>> Bonjour,
>>
>> j'ai une fonction toute simple (en bas) qui ne recoit rien et qui ne
>> retourne rien.
>> je créer un thread pour cette fonction et le démarre :
>>
>> dim tThread as new thread(addressof test)
>> tThread.Start()
>>
>>
>> mais j'obtient une erreur dans ma fonction lors de l'execution.
>> au niveau des form1.progressbar1
>> en gros le débuggeur me dit qu'il faut créer une nouvelle instance pour
> cet
>> objet !
>>
>> J'ai fait un autre test avec la meme fonction mais sans passer ma
>> fonction
> à
>> un thread
>> Et la sa marche je n'ai pas l'erreur !
>>
>> J'en conclu que cela vient du fait que ma fonction tourne dans un


thread
>> mais je ne sais pas comment contourner le problème.
>> Si quelqu'un a une petite idée j'en serait ravis :)
>> Merci d'avance
>>
>>
>> '-----------------------------
>> 'fonction test
>> '-----------------------------
>> public sub test()
>>
>> dim i as integer
>>
>> form1.progressbar1.maximum= 1000000
>> for i = 0 to 1000000
>> form1.progressbar1.value = i
>> next
>>
>>
>
>




Avatar
Titeuf
c'est bon cela marche j'ai suivis l'article
http://www.c2i.fr/code.aspx?IDCode`4
Merci à tous :)
Avatar
Titeuf
J'ai peut etre crier victoire trop tot :)

tout ce passe bien si les procédures restent dans ma feuille.
en effet si je passe mes procédures dans un module et que j'apel par un
thread j'ai l'erreur "Object reference not set to an instance of an object."
pour le code voir le premier post
Avatar
Patrice
Ce message indique que l'objet n'est pas initialisé (Nothing). Il doit
manquer un "New" quelque part...

--
Patrice

"Titeuf" a écrit dans le message de
news:
J'ai peut etre crier victoire trop tot :)

tout ce passe bien si les procédures restent dans ma feuille.
en effet si je passe mes procédures dans un module et que j'apel par un
thread j'ai l'erreur "Object reference not set to an instance of an


object."
pour le code voir le premier post




Avatar
Titeuf
Je comprend l'erreur mais je ne sais pas comment la résoudre
j'ai essayé déjà en initialisant l'objet mais j'ai un autre message qui me
dit "Invoke or BeginInvoke cannot be called on a control until the window
handle has been created."
peut etre que j'initialise mal mon objet !

le code dans ma form1 (avec une progressbar1 dedans)

Dim t As New Thread(AddressOf test)
t.Start()


sa c'est le code dans mon module1.vb :

Public Delegate Sub SyncDelegate()
Module Module1

Public Sub test()

Dim del As New SyncDelegate(AddressOf test2)
'Dim prg As New Form1

'prg.ProgressBar1.BeginInvoke(del)

Form1.ProgressBar1.BeginInvoke(del)

End Sub

Public Sub test2()

Dim i As Integer

Form1.ProgressBar1.Maximum = 1000000

For i = 0 To 1000000
Form1.ProgressBar1.Value = i
Next

End Sub

End Module
1 2