Mise à jour d'un label sous thread !

Résolu
Zmain09 Messages postés 110 Date d'inscription lundi 17 septembre 2012 Statut Membre Dernière intervention 11 juin 2016 - Modifié par Zmain09 le 7/06/2016 à 14:18
Zmain09 Messages postés 110 Date d'inscription lundi 17 septembre 2012 Statut Membre Dernière intervention 11 juin 2016 - 7 juin 2016 à 23:06
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
A voir également:

3 réponses

NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
7 juin 2016 à 18:51
Tout est dans la doc : "msdn vb.net thread update form"
https://msdn.microsoft.com/en-us/library/ms171728(v=vs.110).aspx
0
Zmain09 Messages postés 110 Date d'inscription lundi 17 septembre 2012 Statut Membre Dernière intervention 11 juin 2016
Modifié par Zmain09 le 7/06/2016 à 19:23
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 !
0
NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
Modifié par NHenry le 7/06/2016 à 19:35
As-tu essayé d'utiliser la propriété InvokeRequired et Invoke à partir d'un autre control/form ?
0
Zmain09 Messages postés 110 Date d'inscription lundi 17 septembre 2012 Statut Membre Dernière intervention 11 juin 2016
7 juin 2016 à 22:37
Je voit pas comment tu veut dire !
0
Whismeril Messages postés 19146 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 4 octobre 2024 660
Modifié par Whismeril le 7/06/2016 à 19:28
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
0
Zmain09 Messages postés 110 Date d'inscription lundi 17 septembre 2012 Statut Membre Dernière intervention 11 juin 2016
7 juin 2016 à 22:36
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 !
0
Zmain09 Messages postés 110 Date d'inscription lundi 17 septembre 2012 Statut Membre Dernière intervention 11 juin 2016
7 juin 2016 à 23:06
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()
0
Rejoignez-nous