Mise à jour d'un label sous thread ! [Résolu]

Signaler
Messages postés
112
Date d'inscription
lundi 17 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2016
-
Messages postés
112
Date d'inscription
lundi 17 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2016
-
Bonjour à tous,

j'ai un petit problème dans mon code vb je vous explique :

J'ai 2 form !

- Une principale
- Une notification

Comme la notification peut et même doit s'afficher très souvent et rapidement, le mieux pour moi est de l'ouvrir depuis un thread !


Voila un exemple de comment je procède !


Public Sub OuvrirNotif()

Dim t1 As New Thread(AddressOf Notification1)
t1.Start()

End Sub

Public Sub Notification1()

Dim id as String = GetId() ' Comment l'utiliser ?

notif = New Notif1() ' Notif1 ; form déjà créer
Application.Run(notif)

End Sub



Ma form et déjà créer !
Je ne la créer pas manuellement, avec un truc du style :
notif.control.add(label0)
notif.control.add(pic1)
notif.control.add(pic2)
notif.control.add(...)

bref vous avez compris !



Seulement dans cette form j'ai un label qui a chaque fois que la form notif s'ouvre, se label doivent avoir des textes qui leurs correspondes, d'où la déclaration "id" du sub "Notification1()"

Faudra faire peut être un truc comme ceci :


Public Sub Notification1()

Dim id as String = GetId() ' Comment l'utiliser ?

notif = New Notif1()
notif.label1.Text = "id : " & id ' Mais ne fonctionne pas, d’ailleurs c'est complètement logique....

Application.Run(notif)

End Sub


Sinon par invoque ? Mais j'arrive pas a récupérer si vous voulais le label de la form ouverte par thread !


Voila si quelqu'un peut m'aider.. :)
Je vous remercie d'avance.


Valentin

3 réponses

Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Tout est dans la doc : "msdn vb.net thread update form"
https://msdn.microsoft.com/en-us/library/ms171728(v=vs.110).aspx
Messages postés
112
Date d'inscription
lundi 17 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2016

Heu, j'ai déjà vue cette page, et dans mon cas le label et déjà déclarer vue qu'il est déjà dans la form..

donc je peut pas utiliser sa.. par exemple :

If Me.textBox1.InvokeRequired Then


Ne marchera pas vue que j'ai pas sa déclaration au dessus :

Private textBox1 As TextBox


Vue que ma form et déjà tout prête.

Et puis c'est une 2nd form c'est pas la principale,
J’exécute mes fonctions.. depuis la 1ere la principale.



Enfin peut être que y a la réponse dans la doc et que j'ai rater des éléments.. je cherche toujours !
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
As-tu essayé d'utiliser la propriété InvokeRequired et Invoke à partir d'un autre control/form ?
Messages postés
112
Date d'inscription
lundi 17 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2016

Je voit pas comment tu veut dire !
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juin 2021
551
Bonsoir

j'ai relu plusieurs fois ton message et je ne comprends pas ce que tu veux.

Déjà, tu dis par deux fois
Ma form et déjà créer !

mais dans ton code il y a cette ligne
notif = New Notif1()
qui crée une nouvelle instance et donc va à l'encontre de ce que tu dis.

Par contre tu écris ça aussi

Je ne la créer pas manuellement, avec un truc du style :
notif.control.add(label0)
notif.control.add(pic1)
notif.control.add(pic2)
notif.control.add(...)

Veux tu dire que tu as édité l'aspect de ta Form avec l'éditeur?
Comme 99,9999999999999% des Form?
Si oui ton insistance sur un fait qui coule de source, embrouille plutôt en distillant un doute là oú le fait de ne pas en parler n'en aurait pas mis.


Y'a un ID dont même toi tu ne sais pas ce qu'il fait là, comment veux tu qu'on saches à ta place?

Et j'adore ce commentaire
' Mais ne fonctionne pas, d’ailleurs c'est complètement logique...
si tu le dis....

Peux tu décrire précisément ton besoin? Et non pas la solution que tu as choisie (que d'ailleurs tu ne n'arrives pas à décrire).

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
112
Date d'inscription
lundi 17 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2016

Salut oui je comprend se que tu veut dire, j’étais un peut fatiguer quand j'ai poster mon problème ^^

Oui le coms.. je me comprend, c'est parce que je sais pourquoi sa marche pas mais je sais pas le corrigé..


Bref, pour résumer : Je veut ouvrir sous thread une "fenêtre" faites avec l'éditeur, ainsi que modifier texte d'un label de cette "fenêtre".

Comment je pourrai faire !
Messages postés
112
Date d'inscription
lundi 17 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2016

Sujet résolu...

Voila le code :


Dim t As Thread
t = New Thread(Sub()
Using frm As New Notif1
frm.Label4.Text = "............."
Application.Run(frm)
End Using
End Sub)
t.Start()